serviceorder.java 58 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054
  1. package restcontroller.webmanage.sale.serviceorder;
  2. import beans.data.BatchDeleteErr;
  3. import beans.datacontrllog.DataContrlLog;
  4. import beans.datatag.DataTag;
  5. import beans.datateam.DataTeam;
  6. import beans.parameter.Parameter;
  7. import beans.salearea.SaleArea;
  8. import com.alibaba.fastjson2.JSONArray;
  9. import com.alibaba.fastjson2.JSONObject;
  10. import common.BaseClass;
  11. import common.Controller;
  12. import common.YosException;
  13. import common.annotation.API;
  14. import common.annotation.CACHEING;
  15. import common.annotation.CACHEING_CLEAN;
  16. import common.data.*;
  17. import org.apache.commons.lang.StringUtils;
  18. import org.apache.cxf.configuration.security.DNConstraintsType;
  19. import restcontroller.R;
  20. import restcontroller.webmanage.executorService.Executor;
  21. import restcontroller.webmanage.sale.serviceorder.tools.HttpURLRest;
  22. import restcontroller.webmanage.sale.serviceorder.tools.VerificationManage;
  23. import restcontroller.webmanage.sale.workorder.workorder;
  24. import restcontroller.webmanage.sale.workorder.workpresetInfo;
  25. import utility.sms.Sms;
  26. import java.util.*;
  27. import java.util.regex.Pattern;
  28. /**
  29. * 服务申请单
  30. */
  31. @API(title = "服务申请单管理")
  32. public class serviceorder extends Controller {
  33. public static HashMap<String, VerificationManage> message_map = new HashMap<>();
  34. public serviceorder(JSONObject arg0) throws YosException {
  35. super(arg0);
  36. // TODO Auto-generated constructor stub
  37. }
  38. @API(title = "服务申请单新增更新", apiversion = R.ID20230206091403.v1.class)
  39. @CACHEING_CLEAN(apiversions = {R.ID20230206091603.v1.class, R.ID20230206091703.v1.class, R.ID20230206101303.v1.class, R.ID20230217100703.v1.class, R.ID20230217133003.v1.class})
  40. public String insertormodify_serviceorder() throws YosException {
  41. ArrayList<String> sqlList = new ArrayList<>();
  42. // 表名
  43. String tableName = "sa_serviceorder";
  44. Long sa_serviceorderid = content.getLong("sa_serviceorderid");
  45. String servicetype = content.getString("servicetype"); //服务分类
  46. if (sys_enterpriseid <= 0) {
  47. sys_enterpriseid = content.getLong("sys_enterpriseid");
  48. }
  49. String remarks = content.getStringValue("remarks");
  50. String class1 = content.getStringValue("class1");
  51. String class2 = content.getStringValue("class2");
  52. String reason = content.getStringValue("reason");
  53. String province = content.getStringValue("province");
  54. String city = content.getStringValue("city");
  55. String county = content.getStringValue("county");
  56. String address = content.getStringValue("address");
  57. String scenecontact = content.getStringValue("scenecontact");
  58. String scenecontactrole = content.getStringValue("scenecontactrole");
  59. String scenecontactphonenumber = content.getStringValue("scenecontactphonenumber");
  60. String billdate = content.getStringValue("billdate");
  61. String begdate = content.getStringValue("begdate");
  62. String enddate = content.getStringValue("enddate");
  63. long saler_hrid = content.getLongValue("saler_hrid");
  64. boolean isonlinesales = content.getBooleanValue("isonlinesales");
  65. long sys_enterpriseid_service = content.getLongValue("sys_enterpriseid_service");
  66. String sku = content.getStringValue("sku");
  67. String cardno = content.getStringValue("cardno");
  68. long itemid = content.getLongValue("itemid");
  69. SQLFactory sqlFactory = new SQLFactory(this, "服务申请单新增");
  70. if (content.containsKey("servicetype")) {
  71. if (content.getString("servicetype").equals("安装")) {
  72. if (StringUtils.isBlank(sku)) {
  73. //return getErrReturnObject().setErrMsg("安装服务单需添加序列号").toString();
  74. }
  75. if (dbConnect.runSqlQuery("select * from sa_warrantycard where sku='" + sku + "' and siteid='" + siteid + "'").isNotEmpty()) {
  76. DataTag.createSystemTag(this, "sa_serviceorder", sa_serviceorderid, "重复安装");
  77. //return getErrReturnObject().setErrMsg("该序列号已安装,无法再次安装").toString();
  78. }
  79. }
  80. }
  81. if (sa_serviceorderid <= 0 || dbConnect.runSqlQuery(
  82. "select sa_serviceorderid from sa_serviceorder where sa_serviceorderid=" + sa_serviceorderid)
  83. .isEmpty()) {
  84. sa_serviceorderid = createTableID(tableName);
  85. sqlFactory.addParameter("sys_enterpriseid", sys_enterpriseid);
  86. if (saler_hrid != 0) {
  87. sqlFactory.addParameter("saler_hrid", saler_hrid);
  88. } else {
  89. Rows hrRows = dbConnect.runSqlQuery("select hrid from sys_enterprise_tradefield where siteid='" + siteid + "' and sys_enterpriseid=" + sys_enterpriseid);
  90. if (hrRows.isEmpty()) {
  91. sqlFactory.addParameter("saler_hrid", saler_hrid);
  92. } else {
  93. sqlFactory.addParameter("saler_hrid", hrRows.get(0).getLong("hrid"));
  94. }
  95. }
  96. sqlList.add(
  97. DataContrlLog.createLog(this, "sa_serviceorder", sa_serviceorderid, "新增", "服务申请单新增成功").getSQL());
  98. } else {
  99. Rows rows = dbConnect.runSqlQuery(
  100. "SELECT status,sys_enterpriseid,sa_orderid from sa_serviceorder WHERE sa_serviceorderid = "
  101. + sa_serviceorderid);
  102. if (rows.isNotEmpty()) {
  103. if (rows.get(0).getString("status").equals("新建")) {
  104. sqlFactory = new SQLFactory(this, "服务申请单更新");
  105. sqlFactory.addParameter("sys_enterpriseid", sys_enterpriseid);
  106. sqlList.add(DataContrlLog.createLog(this, "sa_serviceorder", sa_serviceorderid, "更新", "服务申请单更新成功")
  107. .getSQL());
  108. } else {
  109. return getErrReturnObject().setErrMsg("非新建状态下无法编辑").toString();
  110. }
  111. } else {
  112. return getErrReturnObject().setErrMsg("该服务申请单不存在").toString();
  113. }
  114. }
  115. sqlFactory.addParameter("saler_hrid", saler_hrid);
  116. sqlFactory.addParameter("servicetype", servicetype);
  117. sqlFactory.addParameter("siteid", siteid);
  118. sqlFactory.addParameter("userid", userid);
  119. sqlFactory.addParameter("username", username);
  120. sqlFactory.addParameter("sa_serviceorderid", sa_serviceorderid);
  121. sqlFactory.addParameter("sa_orderid", 0);
  122. sqlFactory.addParameter("remarks", remarks);
  123. sqlFactory.addParameter("class1", class1);
  124. sqlFactory.addParameter("class2", class2);
  125. sqlFactory.addParameter("reason", reason);
  126. sqlFactory.addParameter("province", province);
  127. sqlFactory.addParameter("city", city);
  128. sqlFactory.addParameter("county", county);
  129. sqlFactory.addParameter("address", address);
  130. sqlFactory.addParameter("scenecontact", scenecontact);
  131. sqlFactory.addParameter("scenecontactrole", scenecontactrole);
  132. sqlFactory.addParameter("scenecontactphonenumber", scenecontactphonenumber);
  133. // 服务申请单号createBillCode("serviceorder")
  134. sqlFactory.addParameter("billno", createBillCode("serviceorder"));
  135. sqlFactory.addParameter("billdate", billdate.equals("") ? "null" : billdate);
  136. sqlFactory.addParameter("begdate", begdate.equals("") ? "null" : begdate);
  137. sqlFactory.addParameter("enddate", enddate.equals("") ? "null" : enddate);
  138. sqlFactory.addParameter("name", content.getStringValue("name"));
  139. sqlFactory.addParameter("phonenumber", content.getStringValue("phonenumber"));
  140. sqlFactory.addParameter("sa_customersid", content.getStringValue("sa_customersid"));
  141. sqlFactory.addParameter("isonlinesales",isonlinesales);
  142. sqlFactory.addParameter("sys_enterpriseid_service",sys_enterpriseid_service);
  143. sqlList.add(sqlFactory.getSQL());
  144. InsertSQL insertSQL = SQLFactory.createInsertSQL(this, "sa_serviceorderitems");
  145. insertSQL.setUniqueid(createTableID("sa_serviceorderitems"));
  146. insertSQL.setSiteid(siteid);
  147. insertSQL.setValue("sa_serviceorderid", sa_serviceorderid);
  148. insertSQL.setValue("itemid", itemid);
  149. insertSQL.setValue("sku", sku);
  150. insertSQL.setValue("cardno", cardno);
  151. insertSQL.setValue("reason", reason);
  152. sqlList.add(insertSQL.getSQL());
  153. dbConnect.runSqlUpdate("delete from sa_serviceorderitems where siteid='" + siteid + "' and sa_serviceorderid=" + sa_serviceorderid);
  154. dbConnect.runSqlUpdate(sqlList);
  155. content.put("sa_serviceorderid", sa_serviceorderid);
  156. return queryserviceorderMain();
  157. }
  158. /**
  159. * 服务分类查询
  160. **/
  161. @API(title = "服务分类查询", apiversion = R.ID20230206112003.v1.class)
  162. public String servicetypeList() throws YosException {
  163. Rows rows = new Rows();
  164. Row row1 = new Row();
  165. row1.put("value", "维修");
  166. Row row2 = new Row();
  167. row2.put("value", "安装");
  168. Row row3 = new Row();
  169. row3.put("value", "清洗");
  170. rows.add(row1);
  171. rows.add(row2);
  172. rows.add(row3);
  173. return getSucReturnObject().setData(rows).toString();
  174. }
  175. @API(title = "可选择序列号列表查询", apiversion = R.ID2025082210142103.v1.class)
  176. @CACHEING
  177. public String queryskuList() throws YosException {
  178. if (content.containsKey("sys_enterpriseid")) {
  179. sys_enterpriseid = content.getLong("sys_enterpriseid");
  180. }
  181. /*
  182. * 过滤条件设置
  183. */
  184. StringBuffer where = new StringBuffer(" 1=1 ");
  185. if (content.containsKey("where")) {
  186. JSONObject whereObject = content.getJSONObject("where");
  187. if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) {
  188. where.append(" and(");
  189. where.append("t2.itemname like'%").append(whereObject.getString("condition")).append("%' ");
  190. where.append("or t2.itemno like'%").append(whereObject.getString("condition")).append("%' ");
  191. where.append("or t1.sku like'%").append(whereObject.getString("condition")).append("%' ");
  192. where.append(")");
  193. }
  194. if (whereObject.containsKey("sku") && !"".equals(whereObject.getString("sku"))) {
  195. where.append(" and(");
  196. where.append("t1.sku ='").append(whereObject.getString("sku")).append("' ");
  197. where.append(")");
  198. }
  199. if (whereObject.containsKey("isvoid") && !"".equals(whereObject.getString("isvoid"))) {
  200. where.append(" and(");
  201. where.append("t6.isvoid ='").append(whereObject.getString("isvoid")).append("' ");
  202. where.append(")");
  203. }
  204. }
  205. // String hrid = content.getString("hrid");
  206. // SQLFactory sqlFactory = new SQLFactory(this, "审核订单列表查询", pageSize, pageNumber, pageSorting);
  207. // sqlFactory.addParameter_SQL("where", where);
  208. // sqlFactory.addParameter("siteid", siteid);
  209. // sqlFactory.addParameter("sys_enterpriseid", sys_enterpriseid);
  210. // Rows rows = dbConnect.runSqlQuery(sqlFactory.getSQL(false));
  211. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_itemsku", "sku","sa_itemskuid");
  212. querySQL.setTableAlias("t1");
  213. querySQL.addJoinTable(JOINTYPE.left, "plm_item", "t2", "t1.itemid=t2.itemid and t1.siteid=t2.siteid", "itemid", "itemno", "itemname", "model", "spec");
  214. querySQL.addJoinTable(JOINTYPE.left, "plm_unit", "t3", "t3.unitid=t2.unitid and t3.siteid=t2.siteid", "unitname");
  215. querySQL.addJoinTable(JOINTYPE.left, "sa_agents", "t4", "t4.sys_enterpriseid=t1.sys_enterpriseid and t4.siteid=t1.siteid", "agentnum");
  216. querySQL.addJoinTable(JOINTYPE.left, "sys_enterprise", "t5", "t5.sys_enterpriseid=t4.sys_enterpriseid and t5.siteid=t4.siteid", "contact", "phonenumber", "address");
  217. querySQL.addJoinTable(JOINTYPE.left, "sa_warrantycard", "t6", "t6.sku=t1.sku and t6.siteid=t1.siteid", "cardno", "begdate", "enddate","isvoid");
  218. querySQL.addJoinTable(JOINTYPE.left, "sa_customers", "t7", "t6.sa_customersid=t7.sa_customersid and t6.siteid=t7.siteid", "sa_customersid");
  219. querySQL.addQueryFields("customername", "t7.name");
  220. querySQL.addQueryFields("customerphonenumber", "t7.phonenumber");
  221. querySQL.setSiteid(siteid);
  222. querySQL.setWhere("t1.sa_agentsid in (select sa_agentsid from sa_agents where sys_enterpriseid=" + sys_enterpriseid + ")");
  223. querySQL.setWhere(where.toString());
  224. querySQL.setPage(pageSize, pageNumber);
  225. Rows rows = querySQL.query();
  226. // 默认商品图片
  227. Rows defaultImageRows = beans.Item.Item.getItemdefaultImage(this);
  228. // 附件
  229. ArrayList<Long> ids = rows.toArrayList("itemid", new ArrayList<>());
  230. RowsMap attRowsMap = getAttachmentUrl("plm_item", ids);
  231. RowsMap warrantycardRowsMap = SQLFactory.createQuerySQL(this, "sa_warrantycard", "sku","name", "phonenumber","address","sa_customersid","province","city","county").setWhere("sku", rows.toArrayList("sku")).query().toRowsMap("sku");
  232. for (Row row : rows) {
  233. if (attRowsMap.getOrDefault(row.getString("itemid"), new Rows()).isNotEmpty()) {
  234. row.put("attinfos", attRowsMap.getOrDefault(row.getString("itemid"), new Rows()));
  235. } else {
  236. row.put("attinfos", defaultImageRows);
  237. }
  238. String sku = row.getString("sku");
  239. if (warrantycardRowsMap.containsKey(sku) && warrantycardRowsMap.get(sku).isNotEmpty()) {
  240. Row warrantycardRow = warrantycardRowsMap.get(sku).get(0);
  241. row.put("name", warrantycardRow.getString("name"));
  242. row.put("phonenumber", warrantycardRow.getString("phonenumber"));
  243. row.put("address", warrantycardRow.getString("address"));
  244. row.put("sa_customersid", warrantycardRow.getLong("sa_customersid"));
  245. row.put("province", warrantycardRow.getString("province"));
  246. row.put("city", warrantycardRow.getString("city"));
  247. row.put("county", warrantycardRow.getString("county"));
  248. }else{
  249. row.put("name", "");
  250. row.put("phonenumber", "");
  251. row.put("address","");
  252. row.put("sa_customersid", "");
  253. row.put("province", "");
  254. row.put("city", "");
  255. row.put("county", "");
  256. }
  257. }
  258. return getSucReturnObject().setData(rows).toString();
  259. }
  260. @API(title = "可选择订单列表查询", apiversion = R.ID20230206091503.v1.class)
  261. @CACHEING
  262. public String queryCheckOrderList() throws YosException {
  263. if (content.containsKey("sys_enterpriseid")) {
  264. sys_enterpriseid = content.getLong("sys_enterpriseid");
  265. }
  266. /*
  267. * 过滤条件设置
  268. */
  269. StringBuffer where = new StringBuffer(" 1=1 ");
  270. // if(content.getBooleanValue("istool")) {
  271. // where.append(" and t1.type ='工具借用单' ");
  272. // }else {
  273. // where.append(" and t1.type !='工具借用单' ");
  274. // }
  275. if (content.containsKey("where")) {
  276. JSONObject whereObject = content.getJSONObject("where");
  277. if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) {
  278. where.append(" and(");
  279. where.append("t1.sonum like'%").append(whereObject.getString("condition")).append("%' ");
  280. where.append(")");
  281. }
  282. if (whereObject.containsKey("sonum") && !"".equals(whereObject.getString("sonum"))) {
  283. where.append(" and t1.sonum ='").append(whereObject.getString("sonum")).append("' ");
  284. }
  285. if (whereObject.containsKey("begindate") && !"".equals(whereObject.getString("begindate"))) {
  286. where.append(" and t1.checkdate >='").append(whereObject.getString("begindate")).append("' ");
  287. }
  288. if (whereObject.containsKey("enddate") && !"".equals(whereObject.getString("enddate"))) {
  289. where.append(" and t1.checkdate <='").append(whereObject.getString("enddate")).append("' ");
  290. }
  291. }
  292. // String hrid = content.getString("hrid");
  293. SQLFactory sqlFactory = new SQLFactory(this, "审核订单列表查询");
  294. sqlFactory.addParameter_SQL("where", where);
  295. sqlFactory.addParameter("siteid", siteid);
  296. sqlFactory.addParameter("sys_enterpriseid", sys_enterpriseid);
  297. // Rows rows = dbConnect.runSqlQuery(sqlFactory);
  298. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sys_site_parameter", "sys_site_parameterid");
  299. querySQL.setTableAlias("t0");
  300. querySQL.addJoinTable(JOINTYPE.right, sqlFactory, "t1", "t0.siteid='111'", "*");
  301. querySQL.setPage(pageSize, pageNumber);
  302. Rows rows = querySQL.query();
  303. return getSucReturnObject().setData(rows).toString();
  304. }
  305. @API(title = "服务申请单详情", apiversion = R.ID20230206091603.v1.class)
  306. @CACHEING
  307. public String queryserviceorderMain() throws YosException {
  308. Long sa_serviceorderid = content.getLong("sa_serviceorderid");
  309. SQLFactory sqlFactory = new SQLFactory(this, "服务申请单详情查询");
  310. sqlFactory.addParameter("sa_serviceorderid", sa_serviceorderid);
  311. sqlFactory.addParameter("siteid", siteid);
  312. Rows rows = dbConnect.runSqlQuery(sqlFactory);
  313. ArrayList<Long> ids = rows.toArrayList("sa_serviceorderid", new ArrayList<>());
  314. HashMap<Long, ArrayList<String>> tagRows = DataTag.queryTag(this, "sa_serviceorder", ids, true);
  315. for (Row row : rows) {
  316. if (tagRows.get(row.getLong("sa_serviceorderid")) != null) {
  317. row.put("tag", tagRows.get(row.getLong("sa_serviceorderid")));
  318. } else {
  319. row.put("tag", new ArrayList<String>());
  320. }
  321. }
  322. Row row = rows.isNotEmpty() ? rows.get(0) : new Row();
  323. // if(!row.isEmpty()) {
  324. // //服务申请单关联物料查询
  325. // SQLFactory sqlFactorytitem = new SQLFactory(this, "服务申请单关联物料查询");
  326. // sqlFactorytitem.addParameter("sa_serviceorderid", sa_serviceorderid);
  327. // sqlFactorytitem.addParameter("siteid", siteid);
  328. // row.put("titems",dbConnect.runSqlQuery(sqlFactorytitem));
  329. // //服务申请单关联工单查询
  330. // SQLFactory sqlFactoryworkorder = new SQLFactory(this, "服务申请单关联工单查询");
  331. // sqlFactoryworkorder.addParameter("sa_serviceorderid", sa_serviceorderid);
  332. // sqlFactoryworkorder.addParameter("siteid", siteid);
  333. // row.put("workorder",dbConnect.runSqlQuery(sqlFactoryworkorder));
  334. // }
  335. Rows backreasonRows = dbConnect.runSqlQuery("select backreason from sys_dataextend where ownertable='sa_serviceorder' and siteid='" + siteid + "' and backreason is not null and backreason <>'' and ownerid=" + sa_serviceorderid + " order by changedate desc");
  336. if (!backreasonRows.isEmpty()) {
  337. row.put("backreason", backreasonRows.get(0).getString("backreason"));
  338. } else {
  339. row.put("backreason", "");
  340. }
  341. return getSucReturnObject().setData(row).toString();
  342. }
  343. @API(title = "服务申请单详情(不验证token))", apiversion = R.ID20230217133003.v1.class, accesstoken = false)
  344. public String queryserviceorderMainWithoutToken() throws YosException {
  345. Long sa_serviceorderid = content.getLong("sa_serviceorderid");
  346. SQLFactory sqlFactory = new SQLFactory(this, "服务申请单详情查询2");
  347. sqlFactory.addParameter("sa_serviceorderid", sa_serviceorderid);
  348. Rows rows = dbConnect.runSqlQuery(sqlFactory);
  349. Row row = rows.isNotEmpty() ? rows.get(0) : new Row();
  350. if (!row.isEmpty()) {
  351. //服务申请单关联物料查询
  352. SQLFactory sqlFactorytitem = new SQLFactory(this, "服务申请单关联物料查询");
  353. sqlFactorytitem.addParameter("sa_serviceorderid", sa_serviceorderid);
  354. row.put("titems", dbConnect.runSqlQuery(sqlFactorytitem));
  355. //服务申请单关联工单查询
  356. SQLFactory sqlFactoryworkorder = new SQLFactory(this, "服务申请单关联工单查询");
  357. sqlFactoryworkorder.addParameter("sa_serviceorderid", sa_serviceorderid);
  358. row.put("workorder", dbConnect.runSqlQuery(sqlFactoryworkorder));
  359. }
  360. Rows backreasonRows = dbConnect.runSqlQuery("select backreason from sys_dataextend where ownertable='sa_serviceorder' and backreason is not null and backreason <>'' and ownerid=" + sa_serviceorderid + " order by changedate desc");
  361. if (!backreasonRows.isEmpty()) {
  362. row.put("backreason", backreasonRows.get(0).getString("backreason"));
  363. } else {
  364. row.put("backreason", "");
  365. }
  366. return getSucReturnObject().setData(row).toString();
  367. }
  368. @API(title = "服务申请单关联工单查询", apiversion = R.ID20230207154203.v1.class)
  369. @CACHEING
  370. public String queryserviceorderWorkorderList() throws YosException {
  371. Long sa_serviceorderid = content.getLong("sa_serviceorderid");
  372. StringBuffer where = new StringBuffer(" 1=1 ");
  373. // if (content.containsKey("where")) {
  374. // JSONObject whereObject = content.getJSONObject("where");
  375. // if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) {
  376. // where.append(" and(");
  377. // where.append("t1.billno like'%").append(whereObject.getString("condition")).append("%' ");
  378. // where.append("or t3.sonum like'%").append(whereObject.getString("condition")).append("%' ");
  379. // where.append("or t2.enterprisename like'%").append(whereObject.getString("condition")).append("%' ");
  380. // where.append("or t1.reason like'%").append(whereObject.getString("condition")).append("%' ");
  381. // where.append(")");
  382. // }
  383. // if (whereObject.containsKey("status") && !"".equals(whereObject.getString("status"))) {
  384. // where.append(" and t1.status ='").append(whereObject.getString("status")).append("' ");
  385. // }
  386. // }
  387. SQLFactory sqlFactory = new SQLFactory(this, "服务申请单关联工单查询");
  388. sqlFactory.addParameter("siteid", siteid);
  389. sqlFactory.addParameter("sa_serviceorderid", sa_serviceorderid);
  390. sqlFactory.addParameter_SQL("where", where);
  391. // Rows rows = dbConnect.runSqlQuery(sqlFactory);
  392. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sys_site_parameter", "sys_site_parameterid");
  393. querySQL.setTableAlias("t0");
  394. querySQL.addJoinTable(JOINTYPE.right, sqlFactory, "t1", "t0.siteid='111'", "*");
  395. querySQL.setPage(pageSize, pageNumber);
  396. Rows rows = querySQL.query();
  397. return getSucReturnObject().setData(rows).toString();
  398. }
  399. @API(title = "查询服务申请单列表", apiversion = R.ID20230206091703.v1.class)
  400. @CACHEING
  401. public String queryserviceorderList() throws YosException {
  402. StringBuffer where = new StringBuffer(" 1=1 ");
  403. if (content.containsKey("where")) {
  404. JSONObject whereObject = content.getJSONObject("where");
  405. if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) {
  406. where.append(" and(");
  407. where.append("t1.servicetype like'%").append(whereObject.getString("condition")).append("%' ");
  408. where.append("or t2.enterprisename like'%").append(whereObject.getString("condition")).append("%' ");
  409. where.append("or t1.reason like'%").append(whereObject.getString("condition")).append("%' ");
  410. where.append("or t1.class1 like'%").append(whereObject.getString("condition")).append("%' ");
  411. where.append(")");
  412. }
  413. if (whereObject.containsKey("status") && !"".equals(whereObject.getString("status"))) {
  414. where.append(" and t1.status ='").append(whereObject.getString("status")).append("' ");
  415. }
  416. if (whereObject.containsKey("class1") && !"".equals(whereObject.getString("class1"))) {
  417. where.append(" and t1.class1 ='").append(whereObject.getString("class1")).append("' ");
  418. }
  419. if (whereObject.containsKey("servicetype") && !"".equals(whereObject.getString("servicetype"))) {
  420. where.append(" and t1.servicetype ='").append(whereObject.getString("servicetype")).append("' ");
  421. }
  422. if (whereObject.containsKey("status") && !"".equals(whereObject.getString("status"))) {
  423. where.append(" and t1.status ='").append(whereObject.getString("status")).append("' ");
  424. }
  425. if (whereObject.containsKey("begindate") && !"".equals(whereObject.getString("begindate"))) {
  426. where.append(" and t1.submitdate >='").append(whereObject.getString("begindate")).append("'");
  427. }
  428. if (whereObject.containsKey("enddate") && !"".equals(whereObject.getString("enddate"))) {
  429. where.append(" and t1.submitdate <='").append(whereObject.getString("enddate")).append("'");
  430. }
  431. if (whereObject.containsKey("submitdate") && !"".equals(whereObject.getString("submitdate"))) {
  432. where.append(" and t1.submitdate >='").append(whereObject.getString("submitdate")).append("'");
  433. where.append(" and t1.submitdate <='").append(getDate_Str(whereObject.getDate("submitdate"), 1)).append("'");
  434. }
  435. if (whereObject.containsKey("phonenumber") && !"".equals(whereObject.getString("phonenumber"))) {
  436. where.append(" and t1.scenecontactphonenumber ='").append(whereObject.getString("phonenumber")).append("'");
  437. }
  438. if (whereObject.containsKey("customerphonenumber") && !"".equals(whereObject.getString("customerphonenumber"))) {
  439. where.append(" and t1.phonenumber ='").append(whereObject.getString("customerphonenumber")).append("'");
  440. }
  441. if (whereObject.containsKey("sa_customersid") && !"".equals(whereObject.getString("sa_customersid"))) {
  442. where.append(" and t1.sa_customersid ='").append(whereObject.getString("sa_customersid")).append("'");
  443. }
  444. if (whereObject.containsKey("isonlinesales") && !"".equals(whereObject.getString("isonlinesales"))) {
  445. where.append(" and t1.isonlinesales ='").append(whereObject.getString("isonlinesales")).append("' ");
  446. }
  447. if (whereObject.containsKey("createuserid") && !"".equals(whereObject.getString("createuserid"))) {
  448. where.append(" and t1.createuserid ='").append(whereObject.getString("createuserid")).append("'");
  449. }
  450. if (whereObject.getBooleanValue("todaysubmitCount")) {
  451. where.append(" and t1.status != '新建' and DATE(t1.submitdate) = CURDATE() ");
  452. }
  453. if (whereObject.getBooleanValue("todayazsubmitCount")) {
  454. where.append(" and t1.status != '新建' and t10.type='安装' and DATE(t1.submitdate) = CURDATE() ");
  455. }
  456. if (whereObject.getBooleanValue("todaywxsubmitCount")) {
  457. where.append(" and t1.status != '新建' and t10.type='维修' and DATE(t1.submitdate) = CURDATE() ");
  458. }
  459. if (whereObject.getBooleanValue("todayqxsubmitCount")) {
  460. where.append(" and t1.status != '新建' and t10.type='清洗' and DATE(t1.submitdate) = CURDATE() ");
  461. }
  462. if (whereObject.getBooleanValue("tobeassignedCount")) {
  463. where.append(" and t1.status = '待分配' ");
  464. }
  465. if (whereObject.getBooleanValue("tobeassignedCount24")) {
  466. where.append(" and t1.status = '待分配' and t1.submitdate < DATE_SUB(NOW(), INTERVAL 24 HOUR) ");
  467. }
  468. if (whereObject.getBooleanValue("pendingCount")) {
  469. where.append(" and t1.status = '待受理' ");
  470. }
  471. if (whereObject.getBooleanValue("pendingCount24")) {
  472. where.append(" and t1.status = '待受理' and t1.allocationdate < DATE_SUB(NOW(), INTERVAL 24 HOUR) ");
  473. }
  474. if (whereObject.getBooleanValue("refuseacceptCount")) {
  475. where.append(" and t1.status = '拒绝受理' ");
  476. }
  477. if (whereObject.getBooleanValue("tobeservedCount")) {
  478. where.append(" and t1.status = '待服务' ");
  479. }
  480. if (whereObject.getBooleanValue("inserviceCount")) {
  481. where.append(" and t1.status = '服务中' ");
  482. }
  483. }
  484. SQLFactory sqlFactory = new SQLFactory(this, "服务申请单列表查询");
  485. sqlFactory.addParameter("siteid", siteid);
  486. sqlFactory.addParameter_SQL("where", where);
  487. // Rows rows = dbConnect.runSqlQuery(sqlFactory);
  488. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sys_site_parameter", "sys_site_parameterid");
  489. querySQL.setTableAlias("t0");
  490. querySQL.addJoinTable(JOINTYPE.right, sqlFactory, "t1", "t0.siteid='111'", "*");
  491. querySQL.setPage(pageSize, pageNumber);
  492. Rows rows = querySQL.query();
  493. ArrayList<Long> ids = rows.toArrayList("sa_serviceorderid", new ArrayList<>());
  494. HashMap<Long, ArrayList<String>> tagRows = DataTag.queryTag(this, "sa_serviceorder", ids, true);
  495. for (Row row : rows) {
  496. if (tagRows.get(row.getLong("sa_serviceorderid")) != null) {
  497. row.put("tag", tagRows.get(row.getLong("sa_serviceorderid")));
  498. } else {
  499. row.put("tag", new ArrayList<String>());
  500. }
  501. }
  502. return getSucReturnObject().setData(rows).toString();
  503. }
  504. @API(title = "服务申请单状态统计", apiversion = R.ID2025111809442603.v1.class)
  505. public String queryserviceorderStatusList() throws YosException {
  506. SQLFactory sqlFactory2 = new SQLFactory(this, "服务申请单状态统计");
  507. sqlFactory2.addParameter("siteid", siteid);
  508. sqlFactory2.addParameter_SQL("where", " 1=1 ");
  509. Rows rows_total = dbConnect.runSqlQuery(sqlFactory2.getSQL());
  510. return getSucReturnObject().setData(rows_total).toString();
  511. }
  512. @API(title = "查询服务申请单列表(不验证token)", apiversion = R.ID20230217100703.v1.class, accesstoken = false)
  513. public String queryserviceorderListWithoutToken() throws YosException {
  514. StringBuffer where = new StringBuffer(" 1=1 ");
  515. boolean isadmin = content.getBooleanValue("isadmin");
  516. if (!isadmin) {
  517. if (usertype == 1) {
  518. ArrayList<Long> sa_saleareaidsList = new ArrayList<>();
  519. sa_saleareaidsList.addAll(userInfo.getSaleAreaIds());
  520. sa_saleareaidsList.addAll(SaleArea.getSubSaleAreaIds(this, userInfo.getSaleAreaIds()));
  521. String where2 = " and t1.sys_enterpriseid in (select sys_enterpriseid from sys_enterprise_tradefield where siteid='" + siteid + "' and sa_saleareaid in " + sa_saleareaidsList + ")";
  522. where2 = where2.replace("[", "(").replace("]", ")");
  523. where.append(where2);
  524. } else if (usertype == 21 || usertype == 22) {
  525. where.append(" and t1.sys_enterpriseid=" + sys_enterpriseid + " ");
  526. }
  527. }
  528. if (content.containsKey("where")) {
  529. JSONObject whereObject = content.getJSONObject("where");
  530. if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) {
  531. where.append(" and(");
  532. where.append("t1.billno like'%").append(whereObject.getString("condition")).append("%' ");
  533. where.append("or t3.sonum like'%").append(whereObject.getString("condition")).append("%' ");
  534. where.append("or t2.enterprisename like'%").append(whereObject.getString("condition")).append("%' ");
  535. where.append("or t1.reason like'%").append(whereObject.getString("condition")).append("%' ");
  536. where.append(")");
  537. }
  538. if (whereObject.containsKey("status") && !"".equals(whereObject.getString("status"))) {
  539. where.append(" and t1.status ='").append(whereObject.getString("status")).append("' ");
  540. }
  541. if (whereObject.containsKey("begindate") && !"".equals(whereObject.getString("begindate"))) {
  542. where.append(" and t1.submitdate >='").append(whereObject.getString("begindate")).append("'");
  543. }
  544. if (whereObject.containsKey("enddate") && !"".equals(whereObject.getString("enddate"))) {
  545. where.append(" and t1.submitdate <='").append(whereObject.getString("enddate")).append("'");
  546. }
  547. if (whereObject.containsKey("phonenumber") && !"".equals(whereObject.getString("phonenumber"))) {
  548. where.append(" and t1.scenecontactphonenumber ='").append(whereObject.getString("phonenumber")).append("'");
  549. }
  550. }
  551. SQLFactory sqlFactory = new SQLFactory(this, "服务申请单列表查询2");
  552. //sqlFactory.addParameter("siteid", siteid);
  553. sqlFactory.addParameter_SQL("where", where);
  554. // Rows rows = dbConnect.runSqlQuery(sqlFactory);
  555. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sys_site_parameter", "sys_site_parameterid");
  556. querySQL.setTableAlias("t0");
  557. querySQL.addJoinTable(JOINTYPE.right, sqlFactory, "t1", "t0.siteid='111'", "*");
  558. querySQL.setPage(pageSize, pageNumber);
  559. Rows rows = querySQL.query();
  560. return getSucReturnObject().setData(rows).toString();
  561. }
  562. @API(title = "工单模板查询", apiversion = R.ID20230206155803.v1.class)
  563. @CACHEING
  564. public String queryworkerordertemplate() throws YosException {
  565. Rows rows = dbConnect.runSqlQuery(
  566. "select sa_workorder_templateid,name,type from sa_workorder_template where siteid='" + siteid + "' and isused=1");
  567. return getSucReturnObject().setData(rows).toString();
  568. }
  569. @API(title = "服务申请单转工单", apiversion = R.ID20230207091003.v1.class)
  570. @CACHEING_CLEAN(apiversions = {R.ID20230206091603.v1.class, R.ID20230206091703.v1.class, R.ID20230206101303.v1.class, R.ID20230208140103.v1.class, R.ID20230208140203.v1.class,
  571. R.ID20230209091103.v1.class, R.ID20230207154203.v1.class, R.ID20230217100703.v1.class, R.ID20230217133003.v1.class})
  572. public String serviceorderToWorkorder() throws YosException {
  573. Long sa_serviceorderid = content.getLong("sa_serviceorderid");
  574. String type = content.getString("type");
  575. JSONArray projectlearders = content.getJSONArray("projectlearders");
  576. Long sa_workorder_templateid = content.getLongValue("sa_workorder_templateid");
  577. Rows rows = dbConnect
  578. .runSqlQuery("select * from sa_serviceorder where sa_serviceorderid ='"
  579. + sa_serviceorderid + "' and siteid='" + siteid + "'");
  580. Rows workorderRows = dbConnect
  581. .runSqlQuery("select sa_workorderid,status,billno,sa_serviceorderid from sa_workorder where sa_serviceorderid ='"
  582. + sa_serviceorderid + "' and siteid='" + siteid + "'");
  583. if (rows.isEmpty()) {
  584. return getErrReturnObject().setErrMsg("此服务单不存在").toString();
  585. } else {
  586. if (!rows.get(0).getString("status").equals("待受理")) {
  587. return getErrReturnObject().setErrMsg("非待受理状态无法生成工单").toString();
  588. }
  589. Rows serviceorderitems = dbConnect.runSqlQuery("select sku from sa_serviceorderitems where sa_serviceorderid=" + sa_serviceorderid);
  590. if (serviceorderitems.isNotEmpty() && type.equals("安装")) {
  591. if (StringUtils.isNotBlank(serviceorderitems.get(0).getString("sku"))) {
  592. if (dbConnect.runSqlQuery("select * from sa_warrantycard where sku='" + serviceorderitems.get(0).getString("sku") + "' and siteid='" + siteid + "' and isvoid=0").isNotEmpty()) {
  593. return getErrReturnObject().setErrMsg("该序列号已安装,无法再次安装").toString();
  594. }
  595. }
  596. }
  597. }
  598. if (!workorderRows.isEmpty()) {
  599. for (Row row : workorderRows) {
  600. if (row.getString("type").equals(type) && !row.getString("status").equals("作废")) {
  601. return getErrReturnObject().setErrMsg("已存在" + type + "类型的工单,无法继续生成此类型的工单").toString();
  602. }
  603. }
  604. }
  605. ArrayList<String> sqlList = new ArrayList<>();
  606. long sa_workorderid = createTableID("sa_workorder");
  607. SQLFactory sqlFactory = new SQLFactory(this, "服务工单新增");
  608. String billno = createBillCode("workorder");
  609. sqlFactory.addParameter("siteid", siteid);
  610. sqlFactory.addParameter("type", type);
  611. sqlFactory.addParameter("sa_serviceorderid", sa_serviceorderid);
  612. sqlFactory.addParameter("billno", billno);
  613. sqlFactory.addParameter("sys_enterpriseid", rows.get(0).getString("sys_enterpriseid"));
  614. sqlFactory.addParameter("sa_workorderid", sa_workorderid);
  615. sqlFactory.addParameter("reason", rows.get(0).getString("reason"));
  616. sqlFactory.addParameter("address", rows.get(0).getString("address"));
  617. sqlFactory.addParameter("isouritem", 1);
  618. sqlFactory.addParameter("startdate", StringUtils.isBlank(rows.get(0).getString("begdate")) ? (StringUtils.isBlank(rows.get(0).getString("billdate")) ? "NULL" : rows.get(0).getString("billdate")) : rows.get(0).getString("begdate"));
  619. sqlFactory.addParameter("scenecontact", rows.get(0).getString("scenecontact"));
  620. sqlFactory.addParameter("scenecontactrole", rows.get(0).getString("scenecontactrole"));
  621. sqlFactory.addParameter("scenecontactphonenumber", rows.get(0).getString("scenecontactphonenumber"));
  622. sqlFactory.addParameter("remarks", rows.get(0).getString("remarks"));
  623. sqlFactory.addParameter("status", "待接单");
  624. sqlFactory.addParameter("userid", userid);
  625. sqlFactory.addParameter("username", username);
  626. sqlFactory.addParameter("sa_workorder_templateid", sa_workorder_templateid);
  627. SQLFactory factory = new SQLFactory(this, "查询订单收货日期");
  628. factory.addParameter("sa_orderid", rows.get(0).getLong("sa_orderid"));
  629. factory.addParameter("siteid", siteid);
  630. Rows rowsreceive = dbConnect.runSqlQuery(factory.getSQL());
  631. if (!rowsreceive.isEmpty()) {
  632. //System.out.println(888);
  633. Date receivedate = rowsreceive.get(0).getDate("receivedate");
  634. Calendar calendar = Calendar.getInstance();
  635. calendar.add(Calendar.YEAR, -2);
  636. Date date = calendar.getTime();
  637. if (date.before(receivedate)) {
  638. sqlFactory.addParameter("inqualityguaranteeperiod", 1);
  639. } else {
  640. sqlFactory.addParameter("inqualityguaranteeperiod", 0);
  641. }
  642. } else {
  643. sqlFactory.addParameter("inqualityguaranteeperiod", 0);
  644. }
  645. sqlList.add("delete from sa_workorder_node where sa_workorderid=" + sa_workorderid);
  646. sqlList.addAll(getAddWorkorderNodeSql(sa_workorder_templateid, sa_workorderid));
  647. sqlList.add(sqlFactory.getSQL());
  648. sqlList.add("update sa_serviceorder set status='待服务' where sa_serviceorderid=" + sa_serviceorderid);
  649. if (projectlearders != null && !projectlearders.isEmpty()) {
  650. sqlList.add("delete from sys_datateam where ownertable='sa_workorder' and ownerid="
  651. + sa_workorderid + " and siteid='" + siteid + "'");
  652. for (Object obj : projectlearders) {
  653. sqlList.addAll(DataTeam.createTeamSQL(this, "sa_workorder", sa_workorderid, (int) obj));
  654. }
  655. }
  656. dbConnect.runSqlUpdate(sqlList);
  657. //发送短信
  658. Rows serviceorderRows = dbConnect.runSqlQuery("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 ='" + sa_serviceorderid + "' and t1.siteid='" + siteid + "'");
  659. for (Object obj : projectlearders) {
  660. int projectlearder = (int) obj;
  661. Rows workersRows = dbConnect.runSqlQuery("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 = '" + siteid + "' and t1.isworker=1 and t1.userid=" + projectlearder);
  662. if (!workersRows.isEmpty()) {
  663. if (StringUtils.isNotBlank(workersRows.get(0).getString("phonenumber"))) {
  664. Sms sms = new Sms();
  665. sms.sendout(Sms.SmsType.Notice, siteid, workersRows.get(0).getString("phonenumber"), "工单号:" + billno + "已指派请处理,客户名称:" + (StringUtils.isBlank(serviceorderRows.get(0).getString("enterprisename")) ? "" : serviceorderRows.get(0).getString("enterprisename"))
  666. + ",提交人:" + serviceorderRows.get(0).getString("submitby") + ",备注:" + serviceorderRows.get(0).getString("remarks"));
  667. }
  668. }
  669. }
  670. return getSucReturnObject().setData(sa_workorderid).toString();
  671. }
  672. @API(title = "重新指派工单", apiversion = R.ID2025101710510903.v1.class)
  673. @CACHEING_CLEAN(apiversions = {serviceorder.class, workorder.class, restcontroller.sale.serviceorder.serviceorder.class})
  674. public String reAssigningWorkorder() throws YosException {
  675. Long sa_workorderid = content.getLong("sa_workorderid");
  676. JSONArray projectlearders = content.getJSONArray("projectlearders");
  677. boolean ismanage = content.getBooleanValue("ismanage");
  678. ArrayList<String> sqlList = new ArrayList<>();
  679. Rows rows = dbConnect
  680. .runSqlQuery("select status,billno from sa_workorder where sa_workorderid ='"
  681. + sa_workorderid + "' and siteid='" + siteid + "'");
  682. for (Row row : rows) {
  683. if (row.getString("status").equals("已完工")) {
  684. return getErrReturnObject().setErrMsg("单号为:【" + row.getString("billno") + "】的工单为已完工状态,无法重新指派工单")
  685. .toString();
  686. }
  687. }
  688. if (!ismanage) {
  689. Rows datateamrows = dbConnect.runSqlQuery("select * from sys_datateam where ownertable='sa_workorder' and ownerid="
  690. + sa_workorderid + " and siteid='" + siteid + "'");
  691. if (datateamrows.isNotEmpty()) {
  692. return getErrReturnObject().setErrMsg("该任务已由其他同事负责推进").toString();
  693. }
  694. }
  695. if (rows.get(0).getString("status").equals("提交")) {
  696. sqlList.add("update sa_workorder set status='进行中' where sa_workorderid ='"
  697. + sa_workorderid + "' and siteid='" + siteid + "'");
  698. } else {
  699. sqlList.add("update sa_workorder set status='待接单' where sa_workorderid ='"
  700. + sa_workorderid + "' and siteid='" + siteid + "'");
  701. }
  702. sqlList.add("delete from sys_datateam where ownertable='sa_workorder' and ownerid="
  703. + sa_workorderid + " and siteid='" + siteid + "'");
  704. if (projectlearders != null && !projectlearders.isEmpty()) {
  705. for (Object obj : projectlearders) {
  706. sqlList.addAll(DataTeam.createTeamSQL(this, "sa_workorder", sa_workorderid, (int) obj));
  707. }
  708. }
  709. dbConnect.runSqlUpdate(sqlList);
  710. return getSucReturnObject().toString();
  711. }
  712. @API(title = "删除", apiversion = R.ID20230206091803.v1.class)
  713. @CACHEING_CLEAN(apiversions = {R.ID20230206091603.v1.class, R.ID20230206091703.v1.class, R.ID20230206101303.v1.class, R.ID20230217100703.v1.class, R.ID20230217133003.v1.class})
  714. public String delete() throws YosException {
  715. JSONArray sa_serviceorderids = content.getJSONArray("sa_serviceorderids");
  716. BatchDeleteErr batchDeleteErr = BatchDeleteErr.create(this, sa_serviceorderids.size());
  717. for (Object o : sa_serviceorderids) {
  718. long sa_serviceorderid = Long.parseLong(o.toString());
  719. Rows RowsStatus = dbConnect
  720. .runSqlQuery("select sa_serviceorderid,status from sa_serviceorder where siteid='" + siteid
  721. + "' and sa_serviceorderid='" + sa_serviceorderid + "'");
  722. if (RowsStatus.isNotEmpty()) {
  723. if (!RowsStatus.get(0).getString("status").equals("新建")) {
  724. //batchDeleteErr.addErr(sa_serviceorderid, "非新建状态的服务申请单无法删除");
  725. continue;
  726. }
  727. }
  728. dbConnect.runSqlUpdate("delete from sa_serviceorder where siteid='" + siteid + "' and sa_serviceorderid="
  729. + sa_serviceorderid);
  730. }
  731. return batchDeleteErr.getReturnObject().toString();
  732. }
  733. @API(title = "发送手机验证码", apiversion = R.ID20230215173103.v1.class, accesstoken = false)
  734. public String sendMessage() throws YosException {
  735. String customerphone = "";
  736. long sa_workorderid = content.getLong("sa_workorderid");
  737. Rows rows = dbConnect.runSqlQuery("select t1.type,t1.verificationcode,t1.verificationdate,t2.* from sa_workorder t1 inner join sa_serviceorder t2 on t1.sa_serviceorderid=t2.sa_serviceorderid and t1.siteid=t2.siteid where t1.sa_workorderid=" + sa_workorderid);
  738. if (rows.isEmpty()) {
  739. return getErrReturnObject().setErrMsg("该工单不存在").toString();
  740. }
  741. long createuserid = rows.get(0).getLong("createuserid");
  742. String type = rows.get(0).getString("type");
  743. Rows userrows = dbConnect.runSqlQuery("select t2.usertype,t1.phonenumber from sys_users t1 inner join sys_usersite t2 on t1.userid = t2.userid where t2.siteid = '" + siteid + "' and t1.userid=" + createuserid);
  744. long usertype = 0;
  745. if (userrows.isNotEmpty()) {
  746. usertype = userrows.get(0).getLong("usertype");
  747. } else {
  748. //return getErrReturnObject().setErrMsg("工单创建人信息有误").toString();
  749. }
  750. if (usertype == 99) {
  751. customerphone = userrows.get(0).getString("phonenumber");
  752. } else {
  753. if (type.equals("安装")) {
  754. customerphone = rows.get(0).getString("scenecontactphonenumber");
  755. }
  756. }
  757. String verificationCode = "";
  758. if (StringUtils.isBlank(rows.get(0).getString("verificationcode"))) {
  759. verificationCode = createVerificationCode();
  760. } else {
  761. verificationCode = rows.get(0).getString("verificationcode");
  762. }
  763. dbConnect.runSqlUpdate("update sa_workorder set verificationcode='" + verificationCode + "' where sa_workorderid=" + sa_workorderid);
  764. Rows wxserviceRows = dbConnect.runSqlQuery("select t2.userid from sys_wechatapp_openids t1 inner join sys_users t2 on t1.userid=t2.userid where t2.phonenumber='" + customerphone + "'");
  765. Row row = new Row();
  766. if (wxserviceRows.isEmpty()) {
  767. ArrayList<Long> userids = wxserviceRows.toArrayList("userid", new ArrayList<>());
  768. JSONObject extradata = new JSONObject();
  769. extradata.put("extraUserList", userids);
  770. Executor.sendEml(this, "verificationcode_push", sa_workorderid, siteid, extradata);
  771. if (!BaseClass.isdebug() && !Arrays.asList(Parameter.getString("system_invalidate_phonenumber").split(",")).contains(customerphone)) {
  772. row.put("code", 1);
  773. row.put("msg", "验证码已发送,请注意查收!");
  774. }
  775. } else {
  776. if (!BaseClass.isdebug() && !Arrays.asList(Parameter.getString("system_invalidate_phonenumber").split(",")).contains(customerphone)) {
  777. if (StringUtils.isNotBlank("customerphone")) {
  778. if (StringUtils.isNotBlank(rows.get(0).getString("verificationdate"))) {
  779. if (isMoreThanOneHourUsingCalendar(rows.get(0).getDate("verificationdate"), new Date())) {
  780. Sms sms = new Sms();
  781. sms.sendout(Sms.SmsType.Notice, customerphone, "尊敬的用户您好,您的工单服务已完成,完工验证码是" + verificationCode + "。");
  782. message_map.put(customerphone, new VerificationManage(verificationCode));
  783. dbConnect.runSqlUpdate("update sa_workorder set verificationdate=CURRENT_TIME where sa_workorderid=" + sa_workorderid);
  784. }
  785. } else {
  786. Sms sms = new Sms();
  787. sms.sendout(Sms.SmsType.Notice, customerphone, "尊敬的用户您好,您的工单服务已完成,完工验证码是" + verificationCode + "。");
  788. message_map.put(customerphone, new VerificationManage(verificationCode));
  789. dbConnect.runSqlUpdate("update sa_workorder set verificationdate=CURRENT_TIME where sa_workorderid=" + sa_workorderid);
  790. }
  791. }
  792. row.put("code", 1);
  793. row.put("msg", "手机验证码已发送,请注意查收!");
  794. } else {
  795. row.put("code", 1);
  796. row.put("msg", "手机验证码为:" + verificationCode);
  797. }
  798. }
  799. return getSucReturnObject().setData(row).toString();
  800. }
  801. /**
  802. * 验证码校验
  803. **/
  804. @API(title = "验证码校验", apiversion = R.ID20230215173203.v1.class, accesstoken = false)
  805. public String checkVerificationCode() throws YosException {
  806. String customerphone = "";
  807. long sa_workorderid = content.getLong("sa_workorderid");
  808. Rows rows = dbConnect.runSqlQuery("select t1.type,t2.* from sa_workorder t1 inner join sa_serviceorder t2 on t1.sa_serviceorderid=t2.sa_serviceorderid and t1.siteid=t2.siteid where t1.sa_workorderid=" + sa_workorderid);
  809. if (rows.isEmpty()) {
  810. return getErrReturnObject().setErrMsg("该工单不存在").toString();
  811. }
  812. long createuserid = rows.get(0).getLong("createuserid");
  813. String type = rows.get(0).getString("type");
  814. Rows userrows = dbConnect.runSqlQuery("select t2.usertype,t1.phonenumber from sys_users t1 inner join sys_usersite t2 on t1.userid = t2.userid where t2.siteid = '" + siteid + "' and t1.userid=" + createuserid);
  815. long usertype = 0;
  816. if (userrows.isNotEmpty()) {
  817. usertype = userrows.get(0).getLong("usertype");
  818. } else {
  819. //return getErrReturnObject().setErrMsg("工单创建人信息有误").toString();
  820. }
  821. if (usertype == 99) {
  822. customerphone = userrows.get(0).getString("phonenumber");
  823. } else {
  824. if (type.equals("安装")) {
  825. customerphone = rows.get(0).getString("scenecontactphonenumber");
  826. }
  827. }
  828. String code = content.getStringValue("code");
  829. boolean isgeneralcompletioncode = Parameter.getBoolean(siteid, "isgeneralcompletioncode");
  830. String generalcompletioncode = Parameter.getString(siteid, "generalcompletioncode");
  831. if (isgeneralcompletioncode) {
  832. if (!code.equals(generalcompletioncode)) {
  833. if (!message_map.containsKey(customerphone) || !message_map.get(customerphone).check(code)) {
  834. return getErrReturnObject().setErrMsg("验证码错误或者过期").toString();
  835. }
  836. }
  837. } else {
  838. if (!message_map.containsKey(customerphone) || !message_map.get(customerphone).check(code)) {
  839. return getErrReturnObject().setErrMsg("验证码错误或者过期").toString();
  840. }
  841. }
  842. return getSucReturnObject().toString();
  843. }
  844. private ArrayList<String> getAddWorkorderNodeSql(long sa_workorder_templateid, long sa_workorderid)
  845. throws YosException {
  846. ArrayList sqList = new ArrayList<String>();
  847. Rows rows = dbConnect.runSqlQuery(
  848. "select t1.sa_workorder_template_worksid,t1.sequence,t1.parentid,t2.* from sa_workorder_template_works t1 inner join sa_workpreset t2 on t1.siteid=t2.siteid and t1.sa_workpresetid=t2.sa_workpresetid where t1.siteid='"
  849. + siteid + "' and t1.sa_workorder_templateid =" + sa_workorder_templateid + " order by t1.sequence asc");
  850. RowsMap rowsMap = rows.toRowsMap("parentid");
  851. if (!rowsMap.get(0).isEmpty()) {
  852. for (Row row : rowsMap.get(0)) {
  853. workpresetInfo workpresetInfo = new workpresetInfo();
  854. workpresetInfo.setWorkname(row.getString("workname"));
  855. workpresetInfo.setRemarks(row.getString("remarks"));
  856. workpresetInfo.setAdditem(row.getLong("additem"));
  857. workpresetInfo.setAddperson(row.getLong("addperson"));
  858. workpresetInfo.setAmountpay(row.getLong("amountpay"));
  859. workpresetInfo.setConfirm(row.getLong("confirm"));
  860. workpresetInfo.setConfirm_options(JSONArray.parseArray(row.getString("confirm_options")));
  861. workpresetInfo.setContractupload(row.getLong("contractupload"));
  862. workpresetInfo.setFileupload(row.getLong("fileupload"));
  863. workpresetInfo.setItemtype(row.getString("itemtype"));
  864. workpresetInfo.setRequired(row.getLong("required"));
  865. workpresetInfo.setTextedit(row.getLong("textedit"));
  866. workpresetInfo.setSignature(row.getLong("signature"));
  867. workpresetInfo.setPasscheck(row.getLong("passcheck"));
  868. workpresetInfo.setQuestionedit(row.getLong("questionedit"));
  869. workpresetInfo.setQuestionoption(row.getString("questionoption"));
  870. String workpresetjson = JSONObject.toJSONString(workpresetInfo);
  871. SQLFactory sqlFactory = new SQLFactory(this, "服务工单流程节点新增");
  872. long sa_workorder_nodeid = createTableID("sa_workorder_node");
  873. sqlFactory.addParameter("sa_workorder_nodeid", sa_workorder_nodeid);
  874. sqlFactory.addParameter("sa_workorderid", sa_workorderid);
  875. sqlFactory.addParameter("siteid", siteid);
  876. sqlFactory.addParameter("parentid", 0);
  877. sqlFactory.addParameter("workpresetjson", workpresetjson);
  878. sqlFactory.addParameter("sequence", row.getLong("sequence"));
  879. sqlFactory.addParameter("userid", userid);
  880. sqlFactory.addParameter("username", username);
  881. sqList.add(sqlFactory.getSQL());
  882. if (!rowsMap.get(row.getLong("sa_workorder_template_worksid")).isEmpty()) {
  883. for (Row row2 : rowsMap.get(row.getLong("sa_workorder_template_worksid"))) {
  884. workpresetInfo workpresetInfo1 = new workpresetInfo();
  885. workpresetInfo1.setWorkname(row2.getString("workname"));
  886. workpresetInfo1.setRemarks(row2.getString("remarks"));
  887. workpresetInfo1.setAdditem(row2.getLong("additem"));
  888. workpresetInfo1.setAddperson(row2.getLong("addperson"));
  889. workpresetInfo1.setAmountpay(row2.getLong("amountpay"));
  890. workpresetInfo1.setConfirm(row2.getLong("confirm"));
  891. workpresetInfo1.setConfirm_options(JSONArray.parseArray(row2.getString("confirm_options")));
  892. workpresetInfo1.setContractupload(row2.getLong("contractupload"));
  893. workpresetInfo1.setFileupload(row2.getLong("fileupload"));
  894. workpresetInfo1.setItemtype(row2.getString("itemtype"));
  895. workpresetInfo1.setRequired(row2.getLong("required"));
  896. workpresetInfo1.setTextedit(row2.getLong("textedit"));
  897. workpresetInfo1.setSignature(row2.getLong("signature"));
  898. workpresetInfo1.setPasscheck(row2.getLong("passcheck"));
  899. workpresetInfo1.setQuestionedit(row2.getLong("questionedit"));
  900. workpresetInfo1.setQuestionoption(row2.getString("questionoption"));
  901. String workpresetjson1 = JSONObject.toJSONString(workpresetInfo1);
  902. SQLFactory sqlFactory1 = new SQLFactory(this, "服务工单流程节点新增");
  903. sqlFactory1.addParameter("sa_workorder_nodeid", createTableID("sa_workorder_node"));
  904. sqlFactory1.addParameter("sa_workorderid", sa_workorderid);
  905. sqlFactory1.addParameter("siteid", siteid);
  906. sqlFactory1.addParameter("parentid", sa_workorder_nodeid);
  907. sqlFactory1.addParameter("workpresetjson", workpresetjson1);
  908. sqlFactory1.addParameter("sequence", row2.getLong("sequence"));
  909. sqlFactory1.addParameter("userid", userid);
  910. sqlFactory1.addParameter("username", username);
  911. sqList.add(sqlFactory1.getSQL());
  912. }
  913. }
  914. }
  915. }
  916. return sqList;
  917. }
  918. // private String sendMessage_0(String phone, String verificationCode) throws Exception {
  919. // HttpURLRest rest = new HttpURLRest("http://smssh1.253.com/msg/v1/send/json");
  920. // rest.addHeader("Content-type", "applica分配tion/json");
  921. // JSONObject jsonObject = new JSONObject();
  922. // jsonObject.put("account", "N3147701");
  923. // jsonObject.put("password", "4ClGyab6fv6a87");
  924. // jsonObject.put("msg", "【浙江美大】您好,您的验证码是" + verificationCode);
  925. // jsonObject.put("phone", phone);
  926. // rest.addRawBody(jsonObject.toString());
  927. // String s = rest.post();
  928. /// / PaoSetRemote verCodehistory = getpaoset("VerCodehistory");
  929. /// / PaoRemote remote = verCodehistory.addAtEnd();
  930. /// / remote.setValue("phone",phone);
  931. /// / remote.setValue("msg","【Banninger】您好,您的验证码是"+verificationCode);
  932. /// / remote.setValue("content",s);
  933. /// / verCodehistory.save();
  934. // return s;
  935. // }
  936. public static String createVerificationCode() {
  937. String s = "";
  938. while (s.length() < 6)
  939. s += (int) (Math.random() * 10);
  940. return s;
  941. }
  942. /**
  943. * 方法2:使用 Calendar 计算是否超过一小时
  944. */
  945. public boolean isMoreThanOneHourUsingCalendar(Date date1, Date date2) {
  946. Calendar cal1 = Calendar.getInstance();
  947. Calendar cal2 = Calendar.getInstance();
  948. cal1.setTime(date1);
  949. cal2.setTime(date2);
  950. // 计算相差的毫秒数
  951. long diffInMillis = Math.abs(cal2.getTimeInMillis() - cal1.getTimeInMillis());
  952. return diffInMillis >= 3600000L;
  953. }
  954. }