serviceorder.java 56 KB

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