serviceorder.java 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333
  1. package restcontroller.sale.serviceorder;
  2. import beans.datacontrllog.DataContrlLog;
  3. import beans.dataextend.DataExtend;
  4. import com.alibaba.fastjson2.JSONObject;
  5. import common.Controller;
  6. import common.YosException;
  7. import common.annotation.API;
  8. import common.annotation.CACHEING;
  9. import common.annotation.CACHEING_CLEAN;
  10. import common.data.*;
  11. import org.apache.commons.lang.StringUtils;
  12. import restcontroller.R;
  13. import restcontroller.webmanage.executorService.Executor;
  14. import utility.sms.Sms;
  15. import java.util.ArrayList;
  16. /**
  17. * 服务申请单
  18. */
  19. @API(title = "服务申请单业务端")
  20. public class serviceorder extends Controller {
  21. public serviceorder(JSONObject arg0) throws YosException {
  22. super(arg0);
  23. // TODO Auto-generated constructor stub
  24. }
  25. @API(title = "查询服务申请单列表", apiversion = R.ID20230206101303.v1.class)
  26. @CACHEING
  27. public String queryserviceorderList() throws YosException {
  28. StringBuffer where = new StringBuffer(" 1=1 ");
  29. if (content.containsKey("where")) {
  30. JSONObject whereObject = content.getJSONObject("where");
  31. if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) {
  32. where.append(" and(");
  33. where.append("t1.servicetype like'%").append(whereObject.getString("condition")).append("%' ");
  34. where.append("or t2.enterprisename like'%").append(whereObject.getString("condition")).append("%' ");
  35. where.append("or t1.reason like'%").append(whereObject.getString("condition")).append("%' ");
  36. where.append("or t1.class1 like'%").append(whereObject.getString("condition")).append("%' ");
  37. where.append(")");
  38. }
  39. if (whereObject.containsKey("status") && !"".equals(whereObject.getString("status"))) {
  40. where.append(" and t1.status ='").append(whereObject.getString("status")).append("' ");
  41. }
  42. if (whereObject.containsKey("class1") && !"".equals(whereObject.getString("class1"))) {
  43. where.append(" and t1.class1 ='").append(whereObject.getString("class1")).append("' ");
  44. }
  45. if (whereObject.containsKey("servicetype") && !"".equals(whereObject.getString("servicetype"))) {
  46. where.append(" and t1.servicetype ='").append(whereObject.getString("servicetype")).append("' ");
  47. }
  48. if (whereObject.containsKey("status") && !"".equals(whereObject.getString("status"))) {
  49. where.append(" and t1.status ='").append(whereObject.getString("status")).append("' ");
  50. }
  51. if (whereObject.containsKey("begindate") && !"".equals(whereObject.getString("begindate"))) {
  52. where.append(" and t1.submitdate >='").append(whereObject.getString("begindate")).append("'");
  53. }
  54. if (whereObject.containsKey("enddate") && !"".equals(whereObject.getString("enddate"))) {
  55. where.append(" and t1.submitdate <='").append(getDate_Str(whereObject.getDate("enddate"), 1)).append("'");
  56. }
  57. if (whereObject.containsKey("submitdate") && !"".equals(whereObject.getString("submitdate"))) {
  58. where.append(" and t1.submitdate >='").append(whereObject.getString("submitdate")).append("'");
  59. where.append(" and t1.submitdate <='").append(getDate_Str(whereObject.getDate("submitdate"), 1)).append("'");
  60. }
  61. if (whereObject.containsKey("phonenumber") && !"".equals(whereObject.getString("phonenumber"))) {
  62. where.append(" and t1.scenecontactphonenumber ='").append(whereObject.getString("phonenumber")).append("'");
  63. }
  64. }
  65. // SQLFactory sqlFactory = new SQLFactory(this, "服务申请单列表查询", pageSize, pageNumber, pageSorting);
  66. // sqlFactory.addParameter("sys_enterpriseid", sys_enterpriseid);
  67. // sqlFactory.addParameter("siteid", siteid);
  68. // sqlFactory.addParameter_SQL("where", where);
  69. // Rows rows = dbConnect.runSqlQuery(sqlFactory);
  70. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_serviceorder", "*");
  71. querySQL.setTableAlias("t1");
  72. querySQL.addJoinTable(JOINTYPE.left, "sys_enterprise", "t2", "t1.sys_enterpriseid = t2.sys_enterpriseid AND t1.siteid = t2.siteid");
  73. querySQL.addJoinTable(JOINTYPE.left, "sa_agents", "t3", "t2.sys_enterpriseid = t3.sys_enterpriseid AND t2.siteid = t3.siteid");
  74. querySQL.addJoinTable(JOINTYPE.left, "sys_enterprise", "t4", "t1.sys_enterpriseid_service = t4.sys_enterpriseid AND t1.siteid = t4.siteid");
  75. querySQL.addJoinTable(JOINTYPE.left, "sa_agents", "t5", "t4.sys_enterpriseid = t5.sys_enterpriseid AND t4.siteid = t5.siteid");
  76. querySQL.addJoinTable(JOINTYPE.left, "(SELECT * FROM (SELECT *,ROW_NUMBER() OVER (PARTITION BY sa_serviceorderid ORDER BY sa_serviceorderitemsid ASC) AS rowno FROM sa_serviceorderitems) t WHERE rowno = 1)",
  77. "t8", "t8.sa_serviceorderid=t1.sa_serviceorderid and t8.siteid=t1.siteid", "itemid", "sku", "cardno");
  78. querySQL.addJoinTable(JOINTYPE.left, "plm_item", "t9", "t9.itemid=t8.itemid and t9.siteid=t8.siteid", "itemno", "itemname", "model", "spec");
  79. querySQL.addQueryFields("serviceenterprisename", "t4.enterprisename");
  80. querySQL.addQueryFields("serviceabbreviation", "t4.abbreviation");
  81. querySQL.addQueryFields("servicephonenumber", "t4.phonenumber");
  82. querySQL.addQueryFields("serviceagentnum", "t5.agentnum");
  83. querySQL.addQueryFields("jxs_enterprisename", "t2.enterprisename");
  84. querySQL.addQueryFields("jxs_abbreviation", "t2.abbreviation");
  85. querySQL.addQueryFields("jxs_phonenumber", "t2.phonenumber");
  86. querySQL.addQueryFields("jxsagentnum", "t3.agentnum");
  87. querySQL.setSiteid(siteid);
  88. querySQL.setWhere("(t1.sys_enterpriseid=" + sys_enterpriseid + " or t1.sys_enterpriseid_service=" + sys_enterpriseid + ")");
  89. querySQL.setWhere(where.toString());
  90. querySQL.setOrderBy("case when t1.status='新建' then 1 when t1.status='提交' then 2 when t1.status='待分配' then 3 when t1.status='待受理' then 4 when t1.status='拒绝受理' then 5 when t1.status='待服务' then 6 when t1.status='服务中' then 7 when t1.status='已完结' then 8 else 9 end,t1.createdate desc");
  91. querySQL.setPage(pageSize, pageNumber);
  92. Rows rows = querySQL.query();
  93. return getSucReturnObject().setData(rows).toString();
  94. }
  95. @API(title = "提交", apiversion = R.ID20230206101403.v1.class)
  96. @CACHEING_CLEAN(apiversions = {R.ID20230206091603.v1.class, R.ID20230206091703.v1.class,
  97. R.ID20230206101303.v1.class, R.ID20230217100703.v1.class, R.ID20230217133003.v1.class})
  98. public String sumbit() throws YosException {
  99. Long sa_serviceorderid = content.getLong("sa_serviceorderid");
  100. boolean issumbit = true;
  101. Rows rows = dbConnect
  102. .runSqlQuery("select sa_serviceorderid,status,billno,sys_enterpriseid,province,city,county from sa_serviceorder where sa_serviceorderid ='"
  103. + sa_serviceorderid + "' and siteid='" + siteid + "'");
  104. for (Row row : rows) {
  105. if (issumbit) {
  106. if (!row.getString("status").equals("新建")) {
  107. return getErrReturnObject().setErrMsg("单号为:【" + row.getString("billno") + "】的服务申请单为非新建状态,无法提交")
  108. .toString();
  109. }
  110. } else {
  111. if (StringUtils.isBlank(content.getString("backreason"))) {
  112. return getErrReturnObject().setErrMsg("退回原因为空不可退回").toString();
  113. }
  114. if (!row.getString("status").equals("待指派")) {
  115. return getErrReturnObject().setErrMsg("单号为:【" + row.getString("billno") + "】的服务申请单为非待指派状态,无法退回")
  116. .toString();
  117. }
  118. }
  119. }
  120. ArrayList<String> sqlList = new ArrayList<>();
  121. SQLFactory sqlFactoryupdate;
  122. if (issumbit) {
  123. sqlFactoryupdate = new SQLFactory(this, "服务申请单提交");
  124. sqlList.add(
  125. DataContrlLog.createLog(this, "sa_serviceorder", sa_serviceorderid, "提交", "服务申请单提交成功").getSQL());
  126. } else {
  127. sqlFactoryupdate = new SQLFactory(this, "服务申请单反提交");
  128. sqlList.add(
  129. DataContrlLog.createLog(this, "sa_serviceorder", sa_serviceorderid, "反提交", "服务申请单退回成功").getSQL());
  130. // 退回原因
  131. ArrayList<Long> sa_serviceorderids = new ArrayList<>();
  132. sa_serviceorderids.add(sa_serviceorderid);
  133. DataExtend.createBackReasonSql(this, "sa_serviceorder", sa_serviceorderids,
  134. content.getStringValue("backreason"));
  135. }
  136. sqlFactoryupdate.addParameter("siteid", siteid);
  137. sqlFactoryupdate.addParameter("sa_serviceorderid", sa_serviceorderid);
  138. sqlFactoryupdate.addParameter("submitby", username);
  139. sqlList.add(sqlFactoryupdate.getSQL());
  140. if (issumbit) {
  141. Rows agents = dbConnect.runSqlQuery("select * from sa_agents where status=1 and siteid='" + siteid + "' and sys_enterpriseid=" + rows.get(0).getLong("sys_enterpriseid"));
  142. if (agents.isNotEmpty()) {
  143. if (agents.get(0).getBoolean("isservice")) {
  144. sqlList.add("update sa_serviceorder set status='待受理',sys_enterpriseid_service=" + agents.get(0).getLong("sys_enterpriseid") + " where sa_serviceorderid=" + sa_serviceorderid);
  145. } else {
  146. Rows serviceagents = dbConnect.runSqlQuery("select t1.sys_enterpriseid,t2.province,t2.city,t2.county from sa_agents t1 inner join sa_agents_salescope t2 on t1.sa_agentsid=t2.sa_agentsid and t1.siteid=t2.siteid where t1.siteid='" + siteid + "' and t1.isservice=1");
  147. RowsMap countyRowsMap = serviceagents.toRowsMap("county");
  148. RowsMap cityRowsMap = serviceagents.toRowsMap("city");
  149. RowsMap provinceRowsMap = serviceagents.toRowsMap("province");
  150. if (countyRowsMap.containsKey(rows.get(0).getString("county"))) {
  151. UpdateSQL updateSQL = SQLFactory.createUpdateSQL(this, "sa_serviceorder");
  152. updateSQL.setUniqueid(sa_serviceorderid);
  153. updateSQL.setSiteid(siteid);
  154. updateSQL.setValue("status", "待受理");
  155. updateSQL.setValue("sys_enterpriseid_service", countyRowsMap.get(rows.get(0).getString("county")).get(0).getLong("sys_enterpriseid"));
  156. updateSQL.setDateValue("allocationdate");
  157. updateSQL.setValue("allocationby", username);
  158. sqlList.add(updateSQL.getSQL());
  159. sqlList.add(
  160. DataContrlLog.createLog(this, "sa_serviceorder", sa_serviceorderid, "自动分配", "服务申请单自动分配成功").getSQL());
  161. } else if (cityRowsMap.containsKey(rows.get(0).getString("city"))) {
  162. UpdateSQL updateSQL = SQLFactory.createUpdateSQL(this, "sa_serviceorder");
  163. updateSQL.setUniqueid(sa_serviceorderid);
  164. updateSQL.setSiteid(siteid);
  165. updateSQL.setValue("status", "待受理");
  166. updateSQL.setValue("sys_enterpriseid_service", cityRowsMap.get(rows.get(0).getString("city")).get(0).getLong("sys_enterpriseid"));
  167. updateSQL.setDateValue("allocationdate");
  168. updateSQL.setValue("allocationby", username);
  169. sqlList.add(updateSQL.getSQL());
  170. sqlList.add(
  171. DataContrlLog.createLog(this, "sa_serviceorder", sa_serviceorderid, "自动分配", "服务申请单自动分配成功").getSQL());
  172. } else if (provinceRowsMap.containsKey(rows.get(0).getString("province"))) {
  173. UpdateSQL updateSQL = SQLFactory.createUpdateSQL(this, "sa_serviceorder");
  174. updateSQL.setUniqueid(sa_serviceorderid);
  175. updateSQL.setSiteid(siteid);
  176. updateSQL.setValue("status", "待受理");
  177. updateSQL.setValue("sys_enterpriseid_service", provinceRowsMap.get(rows.get(0).getString("province")).get(0).getLong("sys_enterpriseid"));
  178. updateSQL.setDateValue("allocationdate");
  179. updateSQL.setValue("allocationby", username);
  180. sqlList.add(updateSQL.getSQL());
  181. sqlList.add(
  182. DataContrlLog.createLog(this, "sa_serviceorder", sa_serviceorderid, "自动分配", "服务申请单自动分配成功").getSQL());
  183. }
  184. }
  185. }
  186. Rows workersRows = dbConnect.runSqlQuery(
  187. "select t3.phonenumber from sys_hr t1 left join sys_users t3 on t1.userid = t3.userid left join sys_hr t4 on t1.siteid = t4.siteid and t1.reporthrid = t4.hrid where t1.siteid = '"
  188. + siteid + "' and t1.isworker=1 and t1.isleader=1");
  189. Rows serviceorderRows = dbConnect.runSqlQuery(
  190. "select t2.enterprisename,t1.billno,t1.submitby,t1.remarks from sa_serviceorder t1 left join sys_enterprise t2 on t1.sys_enterpriseid=t2.sys_enterpriseid and t1.siteid=t2.siteid where t1.sa_serviceorderid ='"
  191. + sa_serviceorderid + "' and t1.siteid='" + siteid + "'");
  192. if (!workersRows.isEmpty()) {
  193. for (Row row : workersRows) {
  194. Sms sms = new Sms();
  195. if (StringUtils.isNotBlank(row.getString("phonenumber"))) {
  196. sms.sendout(Sms.SmsType.Notice, siteid, row.getString("phonenumber"),
  197. "服务单号:" + serviceorderRows.get(0).getString("billno") + "已指派请处理,客户名称:"
  198. + (StringUtils.isBlank(serviceorderRows.get(0).getString("enterprisename")) ? ""
  199. : serviceorderRows.get(0).getString("enterprisename"))
  200. + ",提交人:" + serviceorderRows.get(0).getString("submitby") + ",备注:"
  201. + serviceorderRows.get(0).getString("remarks"));
  202. }
  203. }
  204. }
  205. Executor.sendEml(this, "serviceordersub", sa_serviceorderid, siteid);
  206. }
  207. dbConnect.runSqlUpdate(sqlList);
  208. return getSucReturnObject().toString();
  209. }
  210. @API(title = "手工分配服务商", apiversion = R.ID2025071710525303.v1.class)
  211. public String assignserviceagentbyhand() throws YosException {
  212. Long sa_serviceorderid = content.getLong("sa_serviceorderid");
  213. sys_enterpriseid = content.getLong("sys_enterpriseid");
  214. Rows rows = dbConnect
  215. .runSqlQuery("select sa_serviceorderid,status,billno,sys_enterpriseid from sa_serviceorder where sa_serviceorderid ='"
  216. + sa_serviceorderid + "' and siteid='" + siteid + "'");
  217. if (rows.isEmpty()) {
  218. return getErrReturnObject().setErrMsg("该服务申请单不存在").toString();
  219. }
  220. if (!rows.get(0).getString("status").equals("待分配") && !rows.get(0).getString("status").equals("手工完结") && !rows.get(0).getString("status").equals("拒绝受理")) {
  221. return getErrReturnObject().setErrMsg("非待分配或手工完结或拒绝受理的服务申请单无法分配服务商").toString();
  222. }
  223. UpdateSQL updateSQL = SQLFactory.createUpdateSQL(this, "sa_serviceorder");
  224. updateSQL.setUniqueid(sa_serviceorderid);
  225. updateSQL.setSiteid(siteid);
  226. updateSQL.setValue("status", "待受理");
  227. updateSQL.setValue("sys_enterpriseid_service", sys_enterpriseid);
  228. updateSQL.setValue("refusereason", "");
  229. updateSQL.setValue("refuseremarks", "");
  230. updateSQL.setDateValue("allocationdate");
  231. updateSQL.setValue("allocationby", username);
  232. dbConnect.runSqlUpdate(updateSQL.getSQL());
  233. dbConnect.runSqlUpdate(
  234. DataContrlLog.createLog(this, "sa_serviceorder", sa_serviceorderid, "手工分配", "服务申请单手工分配成功").getSQL());
  235. return getSucReturnObject().toString();
  236. }
  237. @API(title = "拒绝受理", apiversion = R.ID2025072409011703.v1.class)
  238. @CACHEING_CLEAN(apiversions = {serviceorder.class, restcontroller.webmanage.sale.serviceorder.serviceorder.class})
  239. public String refuse() throws YosException {
  240. Long sa_serviceorderid = content.getLong("sa_serviceorderid");
  241. String refusereason = content.getStringValue("refusereason");
  242. String refuseremarks = content.getStringValue("refuseremarks");
  243. Rows rows = dbConnect
  244. .runSqlQuery("select sa_serviceorderid,status,billno,sys_enterpriseid,province,city,county from sa_serviceorder where sa_serviceorderid ='"
  245. + sa_serviceorderid + "' and siteid='" + siteid + "'");
  246. for (Row row : rows) {
  247. if (!row.getString("status").equals("待受理")) {
  248. return getErrReturnObject().setErrMsg("单号为:【" + row.getString("billno") + "】的服务申请单为非待受理状态,无法拒绝受理")
  249. .toString();
  250. }
  251. if (StringUtils.isBlank(refusereason)) {
  252. return getErrReturnObject().setErrMsg("拒绝原因为空,无法拒绝受理")
  253. .toString();
  254. }
  255. }
  256. ArrayList<String> sqlList = new ArrayList<>();
  257. UpdateSQL updateSQL = SQLFactory.createUpdateSQL(this, "sa_serviceorder");
  258. updateSQL.setUniqueid(sa_serviceorderid);
  259. updateSQL.setSiteid(siteid);
  260. updateSQL.setValue("status", "拒绝受理");
  261. updateSQL.setValue("refusereason", refusereason);
  262. updateSQL.setValue("refuseremarks", refuseremarks);
  263. updateSQL.setValue("changeby", username);
  264. updateSQL.setDateValue("changedate");
  265. sqlList.add(updateSQL.getSQL());
  266. sqlList.add(
  267. DataContrlLog.createLog(this, "sa_serviceorder", sa_serviceorderid, "拒绝受理", "服务申请单拒绝受理成功").getSQL());
  268. dbConnect.runSqlUpdate(sqlList);
  269. return getSucReturnObject().toString();
  270. }
  271. @API(title = "完结服务单", apiversion = R.ID2025072409161803.v1.class)
  272. @CACHEING_CLEAN(apiversions = {serviceorder.class, restcontroller.webmanage.sale.serviceorder.serviceorder.class})
  273. public String wanjie() throws YosException {
  274. Long sa_serviceorderid = content.getLong("sa_serviceorderid");
  275. Rows rows = dbConnect
  276. .runSqlQuery("select sa_serviceorderid,status,billno,sys_enterpriseid,province,city,county from sa_serviceorder where sa_serviceorderid ='"
  277. + sa_serviceorderid + "' and siteid='" + siteid + "'");
  278. for (Row row : rows) {
  279. if (!row.getString("status").equals("待分配") && !row.getString("status").equals("拒绝受理") && !row.getString("status").equals("待受理")) {
  280. return getErrReturnObject().setErrMsg("单号为:【" + row.getString("billno") + "】的服务申请单为非待分配或拒绝受理或待受理状态,无法完结服务单")
  281. .toString();
  282. }
  283. if (StringUtils.isBlank(content.getString("backreason"))) {
  284. return getErrReturnObject().setErrMsg("完结原因(拒绝原因)为空不可完结").toString();
  285. }
  286. }
  287. ArrayList<String> sqlList = new ArrayList<>();
  288. UpdateSQL updateSQL = SQLFactory.createUpdateSQL(this, "sa_serviceorder");
  289. updateSQL.setUniqueid(sa_serviceorderid);
  290. updateSQL.setSiteid(siteid);
  291. updateSQL.setValue("status", "已完结");
  292. updateSQL.setValue("changeby", username);
  293. updateSQL.setDateValue("changedate");
  294. sqlList.add(updateSQL.getSQL());
  295. sqlList.add(
  296. DataContrlLog.createLog(this, "sa_serviceorder", sa_serviceorderid, "完结", "服务申请单完结成功").getSQL());
  297. // 退回原因
  298. ArrayList<Long> sa_serviceorderids = new ArrayList<>();
  299. sa_serviceorderids.add(sa_serviceorderid);
  300. DataExtend.createBackReasonSql(this, "sa_serviceorder", sa_serviceorderids,
  301. content.getStringValue("backreason"));
  302. dbConnect.runSqlUpdate(sqlList);
  303. return getSucReturnObject().toString();
  304. }
  305. }