serviceorder.java 58 KB

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