expressform.java 38 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656
  1. package restcontroller.webmanage.sale.expressform;
  2. import beans.attachment.Attachment;
  3. import beans.data.BatchDeleteErr;
  4. import beans.datacontrllog.DataContrlLog;
  5. import beans.report.Report;
  6. import com.alibaba.fastjson2.JSONArray;
  7. import com.alibaba.fastjson2.JSONObject;
  8. import common.Controller;
  9. import common.YosException;
  10. import common.annotation.API;
  11. import common.annotation.CACHEING;
  12. import common.annotation.CACHEING_CLEAN;
  13. import common.data.*;
  14. import org.apache.commons.lang.StringUtils;
  15. import restcontroller.R;
  16. import restcontroller.sale.stockbill.stockbill;
  17. import restcontroller.webmanage.sale.expressform.util.YTOExpressMailNoClient;
  18. import restcontroller.webmanage.sale.expressform.util.bean.Item;
  19. import restcontroller.webmanage.sale.expressform.util.bean.Person;
  20. import restcontroller.webmanage.sale.expressform.util.bean.YTORequestOrder;
  21. import java.math.BigDecimal;
  22. import java.util.*;
  23. @API(title = "快递信息表")
  24. public class expressform extends Controller {
  25. public expressform(JSONObject content) throws YosException {
  26. super(content);
  27. }
  28. @API(title = "新增更新快递信息", apiversion = R.ID2025080614514703.v1.class)
  29. @CACHEING_CLEAN(apiClass = {expressform.class})
  30. public String insertormodify_expressform() throws YosException {
  31. ArrayList<String> sqlList = new ArrayList<>();
  32. // 表名
  33. String tableName = "expressform";
  34. Long expressformid = content.getLong("expressformid");
  35. String logisticproviderid = content.getStringValue("logisticproviderid");
  36. String ordertype = content.getStringValue("ordertype");
  37. String agencyfund = content.getStringValue("agencyfund");
  38. String itemname = content.getStringValue("itemname");
  39. BigDecimal itemsweight = content.getBigDecimal("itemsweight");
  40. BigDecimal number = content.getBigDecimal("number");
  41. String remarks = content.getStringValue("remarks");
  42. String fpriority_ads = content.getStringValue("fpriority_ads");
  43. long sys_enterpriseid = content.getLong("sys_enterpriseid");
  44. String rcv_name = content.getStringValue("rcv_name");
  45. String rcv_phone = content.getStringValue("rcv_phone");
  46. String rcv_mobile = content.getStringValue("rcv_mobile");
  47. String rcv_postcode = content.getStringValue("rcv_postcode");
  48. String rcv_prov = content.getStringValue("rcv_prov");
  49. String rcv_city = content.getStringValue("rcv_city");
  50. String rcv_county = content.getStringValue("rcv_county");
  51. String rcv_address = content.getStringValue("rcv_address");
  52. long expresssdrid = content.getLongValue("expresssdrid");
  53. String mailno = content.getStringValue("mailno");
  54. String province = content.getStringValue("province");
  55. String city = content.getStringValue("city");
  56. String county = content.getStringValue("county");
  57. String phonenumber = content.getStringValue("phonenumber");
  58. String address = content.getStringValue("address");
  59. if (expressformid <= 0) {
  60. String orderby = "";
  61. if (fpriority_ads.equals("配件>常规")) {
  62. orderby = "desc";
  63. } else {
  64. orderby = "asc";
  65. }
  66. Rows rcvRows = dbConnect.runSqlQuery("select * from sys_enterprise_contacts where workaddress=1 and sys_enterpriseid=" + sys_enterpriseid + " order by case when type='配件' then 1 else 0 end " + orderby);
  67. if (rcvRows.isNotEmpty()) {
  68. rcv_name = StringUtils.isBlank(rcvRows.get(0).getString("name")) ? rcv_name : rcvRows.get(0).getString("name");
  69. rcv_phone = StringUtils.isBlank(rcvRows.get(0).getString("phonenumber")) ? rcv_phone : rcvRows.get(0).getString("phonenumber");
  70. rcv_mobile = StringUtils.isBlank(rcvRows.get(0).getString("telephone")) ? rcv_mobile : rcvRows.get(0).getString("telephone");
  71. rcv_prov = StringUtils.isBlank(rcvRows.get(0).getString("province")) ? rcv_prov : rcvRows.get(0).getString("province");
  72. rcv_city = StringUtils.isBlank(rcvRows.get(0).getString("city")) ? rcv_city : rcvRows.get(0).getString("city");
  73. rcv_county = StringUtils.isBlank(rcvRows.get(0).getString("county")) ? rcv_county : rcvRows.get(0).getString("county");
  74. rcv_address = StringUtils.isBlank(rcvRows.get(0).getString("address")) ? rcv_address : rcvRows.get(0).getString("address");
  75. }
  76. expressformid = createTableID(tableName);
  77. InsertSQL insertSQL = SQLFactory.createInsertSQL(this, tableName);
  78. insertSQL.setUniqueid(expressformid);
  79. insertSQL.setSiteid(siteid);
  80. insertSQL.setValue("logisticproviderid", logisticproviderid);
  81. insertSQL.setValue("ordertype", ordertype);
  82. insertSQL.setValue("agencyfund", agencyfund);
  83. insertSQL.setValue("itemname", itemname);
  84. insertSQL.setValue("itemsweight", itemsweight);
  85. insertSQL.setValue("number", number);
  86. insertSQL.setValue("fpriority_ads", fpriority_ads);
  87. insertSQL.setValue("sys_enterpriseid", sys_enterpriseid);
  88. insertSQL.setValue("rcv_name", rcv_name);
  89. insertSQL.setValue("rcv_phone", rcv_phone);
  90. insertSQL.setValue("rcv_mobile", rcv_mobile);
  91. insertSQL.setValue("rcv_postcode", rcv_postcode);
  92. insertSQL.setValue("rcv_prov", rcv_prov);
  93. insertSQL.setValue("rcv_city", rcv_city);
  94. insertSQL.setValue("rcv_county", rcv_county);
  95. insertSQL.setValue("rcv_address", rcv_address);
  96. insertSQL.setValue("expresssdrid", expresssdrid);
  97. insertSQL.setValue("remarks", remarks);
  98. insertSQL.setValue("mailno", mailno);
  99. insertSQL.setValue("province", province);
  100. insertSQL.setValue("city", city);
  101. insertSQL.setValue("county", county);
  102. insertSQL.setValue("phonenumber", phonenumber);
  103. insertSQL.setValue("address", address);
  104. insertSQL.setValue("txlogisticid", createBillCode("logisticsbill"));
  105. insertSQL.setValue("createby", username);
  106. insertSQL.setDateValue("createdate");
  107. insertSQL.setValue("changeby", username);
  108. insertSQL.setDateValue("changedate");
  109. insertSQL.setValue("status", "新建");
  110. sqlList.add(insertSQL.getSQL());
  111. sqlList.add(DataContrlLog.createLog(this, "expressform", expressformid, "新增", "快递信息新增成功").getSQL());
  112. } else {
  113. Rows rows = dbConnect.runSqlQuery(
  114. "SELECT status,txlogisticid from expressform WHERE expressformid = "
  115. + expressformid);
  116. if (rows.isNotEmpty()) {
  117. if (rows.get(0).getString("status").equals("新建")) {
  118. UpdateSQL updateSQL = SQLFactory.createUpdateSQL(this, tableName);
  119. updateSQL.setUniqueid(expressformid);
  120. updateSQL.setSiteid(siteid);
  121. updateSQL.setValue("logisticproviderid", logisticproviderid);
  122. updateSQL.setValue("ordertype", ordertype);
  123. updateSQL.setValue("agencyfund", agencyfund);
  124. updateSQL.setValue("itemname", itemname);
  125. updateSQL.setValue("itemsweight", itemsweight);
  126. updateSQL.setValue("expresssdrid", expresssdrid);
  127. updateSQL.setValue("number", number);
  128. updateSQL.setValue("fpriority_ads", fpriority_ads);
  129. updateSQL.setValue("sys_enterpriseid", sys_enterpriseid);
  130. updateSQL.setValue("rcv_name", rcv_name);
  131. updateSQL.setValue("rcv_phone", rcv_phone);
  132. updateSQL.setValue("rcv_mobile", rcv_mobile);
  133. updateSQL.setValue("rcv_postcode", rcv_postcode);
  134. updateSQL.setValue("rcv_prov", rcv_prov);
  135. updateSQL.setValue("rcv_city", rcv_city);
  136. updateSQL.setValue("rcv_county", rcv_county);
  137. updateSQL.setValue("rcv_address", rcv_address);
  138. updateSQL.setValue("remarks", remarks);
  139. updateSQL.setValue("mailno", mailno);
  140. updateSQL.setValue("province", province);
  141. updateSQL.setValue("city", city);
  142. updateSQL.setValue("county", county);
  143. updateSQL.setValue("phonenumber", phonenumber);
  144. updateSQL.setValue("address", address);
  145. updateSQL.setValue("changeby", username);
  146. updateSQL.setDateValue("changedate");
  147. sqlList.add(updateSQL.getSQL());
  148. Rows expressform_stockbillrows = dbConnect.runSqlQuery("select * from sa_expressform_stockbill where expressformid=" + expressformid);
  149. for (Row row : expressform_stockbillrows) {
  150. sqlList.add("update st_stockbill set txlogisticid='" + rows.get(0).getString("txlogisticid") + "',mailno='" + mailno + "' where st_stockbillid=" + row.getLong("st_stockbillid"));
  151. }
  152. sqlList.add(DataContrlLog.createLog(this, "expressform", expressformid, "更新", "快递信息更新成功").getSQL());
  153. } else {
  154. return getErrReturnObject().setErrMsg("非新建状态下无法编辑").toString();
  155. }
  156. } else {
  157. return getErrReturnObject().setErrMsg("该快递信息不存在").toString();
  158. }
  159. }
  160. dbConnect.runSqlUpdate(sqlList);
  161. content.put("expressformid", expressformid);
  162. return queryexpressformMain();
  163. }
  164. @API(title = "快递信息详情", apiversion = R.ID2025080614515903.v1.class)
  165. @CACHEING
  166. public String queryexpressformMain() throws YosException {
  167. long expressformid = content.getLong("expressformid");
  168. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "expressform", "*");
  169. querySQL.setTableAlias("t1");
  170. querySQL.addJoinTable(JOINTYPE.left, "sys_enterprise", "t2", "t1.sys_enterpriseid = t2.sys_enterpriseid AND t1.siteid = t2.siteid",
  171. "enterprisename", "abbreviation");
  172. querySQL.addJoinTable(JOINTYPE.left, "sa_agents", "t3", "t1.sys_enterpriseid = t3.sys_enterpriseid AND t1.siteid = t3.siteid",
  173. "agentnum");
  174. querySQL.addJoinTable(JOINTYPE.left, "expresssdr", "t4", "t1.expresssdrid = t4.expresssdrid AND t1.siteid = t4.siteid",
  175. "name", "mobile", "postcode");
  176. querySQL.setWhere("t1.siteid", siteid);
  177. querySQL.setWhere("t1.expressformid", expressformid);
  178. Rows rows = querySQL.query();
  179. Row row = rows.isNotEmpty() ? rows.get(0) : new Row();
  180. return getSucReturnObject().setData(row).toString();
  181. }
  182. @API(title = "快递信息列表", apiversion = R.ID2025080614520703.v1.class)
  183. @CACHEING
  184. public String queryexpressformList() throws YosException {
  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("t1.txlogisticid like'%").append(whereObject.getString("condition")).append("%' ");
  191. where.append("or t1.remarks like'%").append(whereObject.getString("condition")).append("%' ");
  192. where.append(")");
  193. }
  194. if (whereObject.containsKey("status") && !"".equals(whereObject.getString("status"))) {
  195. where.append(" and t1.status ='").append(whereObject.getString("status")).append("' ");
  196. }
  197. }
  198. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "expressform", "*");
  199. querySQL.setTableAlias("t1");
  200. querySQL.addJoinTable(JOINTYPE.left, "sys_enterprise", "t2", "t1.sys_enterpriseid = t2.sys_enterpriseid AND t1.siteid = t2.siteid",
  201. "enterprisename", "abbreviation");
  202. querySQL.addJoinTable(JOINTYPE.left, "sa_agents", "t3", "t1.sys_enterpriseid = t3.sys_enterpriseid AND t1.siteid = t3.siteid",
  203. "agentnum");
  204. querySQL.addJoinTable(JOINTYPE.left, "expresssdr", "t4", "t1.expresssdrid = t4.expresssdrid AND t1.siteid = t4.siteid",
  205. "name", "mobile", "postcode");
  206. querySQL.setWhere("t1.siteid", siteid);
  207. querySQL.setWhere(where);
  208. querySQL.setPage(pageSize, pageNumber);
  209. Rows rows = querySQL.query();
  210. ArrayList<Long> ids = rows.toArrayList("expressformid", new ArrayList<>());
  211. HashMap<Long, Integer> reportMap = Report.getViewCount(this, "expressform", ids);
  212. for (Row row : rows) {
  213. if (reportMap.containsKey(row.getLong("expressformid"))) {
  214. row.put("printcount", reportMap.get(row.getLong("expressformid")));
  215. }
  216. row.putIfAbsent("printcount", 0);
  217. }
  218. return getSucReturnObject().setData(rows).toString();
  219. }
  220. @API(title = "删除", apiversion = R.ID2025080614521603.v1.class)
  221. @CACHEING_CLEAN(apiClass = {expressform.class, stockbill.class})
  222. public String delete() throws YosException {
  223. JSONArray expressformids = content.getJSONArray("expressformids");
  224. BatchDeleteErr batchDeleteErr = BatchDeleteErr.create(this, expressformids.size());
  225. for (Object o : expressformids) {
  226. long expressformid = Long.parseLong(o.toString());
  227. Rows RowsStatus = dbConnect.runSqlQuery("select expressformid,status,success,mailno,txlogisticid from expressform where siteid='"
  228. + siteid + "' and expressformid='" + expressformid + "'");
  229. if (RowsStatus.isNotEmpty()) {
  230. if (!RowsStatus.get(0).getString("status").equals("新建")) {
  231. batchDeleteErr.addErr(expressformid, "非新建状态的快递信息无法删除");
  232. continue;
  233. }
  234. if (StringUtils.isNotBlank(RowsStatus.get(0).getString("mailno"))) {
  235. batchDeleteErr.addErr(expressformid, "该快递信息单已填写'电子面单号',无法删除!");
  236. continue;
  237. }
  238. if (RowsStatus.get(0).getBoolean("success")) {
  239. batchDeleteErr.addErr(expressformid, "该快递信息单已成功生成电子面单,无法删除!");
  240. continue;
  241. }
  242. }
  243. ArrayList<String> sqllist = new ArrayList<>();
  244. sqllist.add("delete from expressform where siteid='" + siteid + "' and expressformid=" + expressformid);
  245. sqllist.add("delete from sa_expressform_stockbill where siteid='" + siteid + "' and expressformid=" + expressformid);
  246. //sqllist.add("delete from expressformbillcodes where siteid='" + siteid + "' and expressformid=" + expressformid);
  247. dbConnect.runSqlUpdate(sqllist);
  248. }
  249. return batchDeleteErr.getReturnObject().toString();
  250. }
  251. @API(title = "可绑定销售出库单查询", apiversion = R.ID2025080711005903.v1.class)
  252. @CACHEING
  253. public String querycanbindstockbills() throws YosException {
  254. long sys_enterpriseid = content.getLong("sys_enterpriseid");
  255. StringBuffer where = new StringBuffer(" 1=1 ");
  256. if (content.containsKey("where")) {
  257. JSONObject whereObject = content.getJSONObject("where");
  258. if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) {
  259. where.append(" and(");
  260. where.append("t1.billno like'%").append(whereObject.getString("condition")).append("%' ");
  261. where.append("or t1.remarks like'%").append(whereObject.getString("condition")).append("%' ");
  262. where.append(")");
  263. }
  264. }
  265. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "st_stockbill", "*");
  266. querySQL.setTableAlias("t1");
  267. querySQL.addJoinTable(JOINTYPE.left, "sys_enterprise", "t2", "t1.sys_enterpriseid = t2.sys_enterpriseid AND t1.siteid = t2.siteid",
  268. "enterprisename", "abbreviation");
  269. querySQL.addJoinTable(JOINTYPE.left, "sa_agents", "t3", "t1.sys_enterpriseid = t3.sys_enterpriseid AND t1.siteid = t3.siteid",
  270. "agentnum");
  271. querySQL.setWhere("t1.siteid", siteid);
  272. querySQL.setWhere("t1.sys_enterpriseid", sys_enterpriseid);
  273. querySQL.setWhere("t1.type='销售出库' and t1.status='审核' and t1.rb=1 and ifnull(t1.txlogisticid,'')=''");
  274. querySQL.setWhere(where);
  275. querySQL.setPage(pageSize, pageNumber);
  276. querySQL.setOrderBy("t1.st_stockbillid desc");
  277. Rows rows = querySQL.query();
  278. return getSucReturnObject().setData(rows).toString();
  279. }
  280. @API(title = "已绑定销售出库单", apiversion = R.ID2025080711063603.v1.class)
  281. @CACHEING
  282. public String yibindstockbills() throws YosException {
  283. long expressformid = content.getLong("expressformid");
  284. StringBuffer where = new StringBuffer(" 1=1 ");
  285. if (content.containsKey("where")) {
  286. JSONObject whereObject = content.getJSONObject("where");
  287. if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) {
  288. where.append(" and(");
  289. where.append("t1.billno like'%").append(whereObject.getString("condition")).append("%' ");
  290. where.append("or t1.remarks like'%").append(whereObject.getString("condition")).append("%' ");
  291. where.append(")");
  292. }
  293. }
  294. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "st_stockbill", "*");
  295. querySQL.setTableAlias("t1");
  296. querySQL.addJoinTable(JOINTYPE.left, "sys_enterprise", "t2", "t1.sys_enterpriseid = t2.sys_enterpriseid AND t1.siteid = t2.siteid",
  297. "enterprisename", "abbreviation");
  298. querySQL.addJoinTable(JOINTYPE.left, "sa_agents", "t3", "t1.sys_enterpriseid = t3.sys_enterpriseid AND t1.siteid = t3.siteid",
  299. "agentnum");
  300. querySQL.addJoinTable(JOINTYPE.inner, "sa_expressform_stockbill", "t4", "t1.st_stockbillid = t4.st_stockbillid AND t1.siteid = t4.siteid");
  301. querySQL.addJoinTable(JOINTYPE.left, "sys_department", "t5", "t5.departmentid = t1.departmentid AND t1.siteid = t5.siteid", "depname");
  302. querySQL.setWhere("t1.siteid", siteid);
  303. querySQL.setWhere("t1.type='销售出库' and t4.expressformid='" + expressformid + "'");
  304. querySQL.setWhere(where);
  305. querySQL.setPage(pageSize, pageNumber);
  306. Rows rows = querySQL.query();
  307. return getSucReturnObject().setData(rows).toString();
  308. }
  309. @API(title = "绑定销售出库单", apiversion = R.ID2025080711074703.v1.class)
  310. @CACHEING_CLEAN(apiClass = {expressform.class, stockbill.class})
  311. public String bindstockbill() throws YosException {
  312. long expressformid = content.getLong("expressformid");
  313. String txlogisticid = content.getString("txlogisticid");
  314. String mailno = content.getString("mailno");
  315. JSONArray st_stockbillids = content.getJSONArray("st_stockbillids");
  316. ArrayList<String> sqlList = new ArrayList<>();
  317. Rows rows = dbConnect.runSqlQuery("select * from expressform where siteid='" + siteid + "' and expressformid=" + expressformid);
  318. if (rows.isEmpty()) {
  319. return getErrReturnObject().setErrMsg("该快递信息不存在").toString();
  320. }
  321. if (!rows.get(0).getString("status").equals("新建")) {
  322. return getErrReturnObject().setErrMsg("非新建状态下不能操作").toString();
  323. }
  324. if (rows.get(0).getLong("sys_enterpriseid") == 0) {
  325. return getErrReturnObject().setErrMsg("必须指定经销商编号,才能关联销售出库单").toString();
  326. }
  327. if (st_stockbillids.size() == 0) {
  328. return getErrReturnObject().setErrMsg("未选中任何销售出库单!").toString();
  329. }
  330. String sql = "select * from st_stockbill where siteid='" + siteid + "' and st_stockbillid in" + st_stockbillids.toJSONString();
  331. sql = sql.replace("[", "(").replace("]", ")");
  332. Rows stockbillrows = dbConnect.runSqlQuery(sql);
  333. for (Row row : stockbillrows) {
  334. if (StringUtils.isNotBlank(row.getString("txlogisticid"))) {
  335. //return getErrReturnObject().setErrMsg("销售出库单" + row.getString("billno") + ",已关联快递信息单!,不得重复关联!").toString();
  336. }
  337. InsertSQL insertSQL = SQLFactory.createInsertSQL(this, "sa_expressform_stockbill");
  338. insertSQL.setUniqueid(createTableID("sa_expressform_stockbill"));
  339. insertSQL.setSiteid(siteid);
  340. insertSQL.setValue("st_stockbillid", row.getLong("st_stockbillid"));
  341. insertSQL.setValue("expressformid", expressformid);
  342. sqlList.add(insertSQL.getSQL());
  343. sqlList.add("update st_stockbill set txlogisticid='" + txlogisticid + "',mailno='" + mailno + "' where st_stockbillid=" + row.getLong("st_stockbillid"));
  344. }
  345. dbConnect.runSqlUpdate(sqlList);
  346. return getSucReturnObject().toString();
  347. }
  348. @API(title = "解绑销售出库单", apiversion = R.ID2025080711235203.v1.class)
  349. @CACHEING_CLEAN(apiClass = {expressform.class, stockbill.class})
  350. public String unbindstockbill() throws YosException {
  351. JSONArray st_stockbillids = content.getJSONArray("st_stockbillids");
  352. long expressformid = content.getLong("expressformid");
  353. ArrayList<String> sqlList = new ArrayList<>();
  354. Rows rows = dbConnect.runSqlQuery("select * from expressform where siteid='" + siteid + "' and expressformid=" + expressformid);
  355. if (rows.isEmpty()) {
  356. return getErrReturnObject().setErrMsg("该快递信息不存在").toString();
  357. }
  358. if (!rows.get(0).getString("status").equals("新建")) {
  359. return getErrReturnObject().setErrMsg("非新建状态下不能操作").toString();
  360. }
  361. if (st_stockbillids.size() == 0) {
  362. return getErrReturnObject().setErrMsg("未选中任何销售出库单!").toString();
  363. }
  364. //sqlList.add("update st_stockbill set txlogisticid='',mailno='' where st_stockbillid in" + st_stockbillids.toJSONString().replace("[", "(").replace("]", ")"));
  365. sqlList.add("delete from sa_expressform_stockbill where expressformid=" + expressformid + " and st_stockbillid in" + st_stockbillids.toJSONString().replace("[", "(").replace("]", ")"));
  366. dbConnect.runSqlUpdate(sqlList);
  367. return getSucReturnObject().toString();
  368. }
  369. @API(title = "审核", apiversion = R.ID2025080711271103.v1.class)
  370. @CACHEING_CLEAN(apiClass = {expressform.class, stockbill.class})
  371. public String check() throws YosException {
  372. Long expressformid = content.getLong("expressformid");
  373. boolean ischeck = content.getBoolean("ischeck");
  374. Rows rows = dbConnect.runSqlQuery("select t1.expressformid,t1.status,t1.mailno,t1.txlogisticid from expressform t1 where t1.expressformid ='"
  375. + expressformid + "' and t1.siteid='" + siteid + "'");
  376. for (Row row : rows) {
  377. if (ischeck) {
  378. if (!row.getString("status").equals("新建")) {
  379. return getErrReturnObject().setErrMsg("非新建状态的【" + row.getString("txlogisticid") + "】快递信息单无法审核")
  380. .toString();
  381. }
  382. if (StringUtils.isBlank(row.getString("mailno"))) {
  383. return getErrReturnObject().setErrMsg("面单号未填写,不能审核;请先尝试申请面单号")
  384. .toString();
  385. }
  386. } else {
  387. if (!row.getString("status").equals("审核")) {
  388. return getErrReturnObject().setErrMsg("非审核状态的【" + row.getString("txlogisticid") + "】快递信息单无法反审核")
  389. .toString();
  390. }
  391. }
  392. }
  393. ArrayList<String> sqlList = new ArrayList<>();
  394. UpdateSQL updateSQL = SQLFactory.createUpdateSQL(this, "expressform");
  395. updateSQL.setUniqueid(expressformid);
  396. updateSQL.setSiteid(siteid);
  397. updateSQL.setValue("status", ischeck ? "审核" : "新建");
  398. updateSQL.setValue("checkby", ischeck ? username : "null");
  399. if (ischeck) {
  400. updateSQL.setDateValue("checkdate");
  401. } else {
  402. updateSQL.setValue("checkdate", "null");
  403. }
  404. sqlList.add(updateSQL.getSQL());
  405. dbConnect.runSqlUpdate(sqlList);
  406. return getSucReturnObject().toString();
  407. }
  408. @API(title = "关闭快递信息单", apiversion = R.ID2025080711325203.v1.class)
  409. @CACHEING_CLEAN(apiClass = {expressform.class, stockbill.class})
  410. public String close() throws YosException {
  411. ArrayList<String> sqlList = new ArrayList<>();
  412. String txlogisticid = content.getString("txlogisticid");
  413. Long expressformid = content.getLong("expressformid");
  414. Rows stockbillrows = dbConnect.runSqlQuery("select * from st_stockbill where txlogisticid='" + txlogisticid + "' and siteid='" + siteid + "'");
  415. Rows rows = dbConnect.runSqlQuery("select * from expressform where siteid='" + siteid + "' and expressformid=" + expressformid);
  416. if (rows.isEmpty()) {
  417. return getErrReturnObject().setErrMsg("该快递信息不存在").toString();
  418. }
  419. if (!rows.get(0).getString("status").equals("审核")) {
  420. return getErrReturnObject().setErrMsg("非审核状态下不能关闭").toString();
  421. }
  422. if ((!rows.get(0).getBoolean("success")) && stockbillrows.size() == 0) {
  423. return getErrReturnObject().setErrMsg("该快递信息单未生成电子面单,且未关联销售出库单,直接删除即可").toString();
  424. }
  425. for (Row row : stockbillrows) {
  426. sqlList.add("update st_stockbill set txlogisticid='',mailno='' where st_stockbillid=" + row.getLong("st_stockbillid"));
  427. }
  428. sqlList.add("update expressform set status='关闭' where expressformid=" + expressformid);
  429. dbConnect.runSqlUpdate(sqlList);
  430. return getSucReturnObject().toString();
  431. }
  432. @API(title = "查询快递发件人", apiversion = R.ID2025080713343803.v1.class)
  433. public String querysendperson() throws YosException {
  434. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "expresssdr", "*");
  435. querySQL.setTableAlias("t1");
  436. querySQL.setWhere("t1.siteid", siteid);
  437. querySQL.setPage(pageSize, pageNumber);
  438. Rows rows = querySQL.query();
  439. return getSucReturnObject().setData(rows).toString();
  440. }
  441. /**
  442. * 向圆通电子面单申请接口发送请求,申请圆通电子面单号
  443. *
  444. * @return
  445. * @throws YosException
  446. */
  447. @API(title = "申请圆通电子面单号", apiversion = R.ID2025080714245303.v1.class)
  448. @CACHEING_CLEAN(apiClass = {expressform.class, stockbill.class})
  449. public String applyMailNo_YTO() throws YosException {
  450. JSONArray expressformids = content.getJSONArray("expressformids");
  451. ArrayList<String> sqlList = new ArrayList<>();
  452. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "expressform", "*");
  453. querySQL.addJoinTable(JOINTYPE.left, "sv_agents", "t2", " t1.sys_enterpriseid = t2.sys_enterpriseid and t1.siteid = t2.siteid", "agentnum", "abbreviation");
  454. querySQL.setTableAlias("t1");
  455. querySQL.setWhere("t1.siteid", siteid);
  456. querySQL.setWhere("t1.expressformid", expressformids);
  457. Rows rows = querySQL.query();
  458. BatchDeleteErr batchDeleteErr = BatchDeleteErr.create(this, expressformids.size());
  459. for (Row row : rows) {
  460. if (row.getBoolean("success")) {
  461. batchDeleteErr.addErr(row.getString("txlogisticid"), row.getString("agentnum"), row.getString("abbreviation"), "该快递信息单已成功申请电子面单");
  462. continue;
  463. } else if (StringUtils.isNotBlank(row.getString("mailno"))) {
  464. batchDeleteErr.addErr(row.getString("txlogisticid"), row.getString("agentnum"), row.getString("abbreviation"), "该快递信息单已有快递面单单号,不需要重复申请!");
  465. continue;
  466. } else if ("关闭".equals(row.getString("status"))) {
  467. batchDeleteErr.addErr(row.getString("txlogisticid"), row.getString("agentnum"), row.getString("abbreviation"), "该快递信息单已关闭,不能申请电子面单!");
  468. continue;
  469. } else if (!"YTO".equalsIgnoreCase(row.getString("logisticproviderid"))) {
  470. batchDeleteErr.addErr(row.getString("txlogisticid"), row.getString("agentnum"), row.getString("abbreviation"), "目前只支持申请圆通的电子面单");
  471. continue;
  472. }
  473. String ordertype = row.getString("ordertype");
  474. Rows expressvalRows = dbConnect.runSqlQuery("select * from expressval where siteid='" + siteid + "' and logisticproviderid='YTO' and ordertype='" + ordertype + "'");
  475. if (expressvalRows.isEmpty()) {
  476. batchDeleteErr.addErr(row.getString("txlogisticid"), row.getString("agentnum"), row.getString("abbreviation"), "数据表'expressVal'中,缺少圆通快递开放平台的对接信息! 发货方式: " + ordertype + ";快递公司: YTO");
  477. continue;
  478. }
  479. Rows expresssdrRows = dbConnect.runSqlQuery("select * from expresssdr where siteid='" + siteid + "' and expresssdrid=" + rows.get(0).getLong("expresssdrid"));
  480. if (expresssdrRows.isEmpty()) {
  481. batchDeleteErr.addErr(row.getString("txlogisticid"), row.getString("agentnum"), row.getString("abbreviation"), "未设置默认发件人信息");
  482. continue;
  483. }
  484. if (StringUtils.isBlank(row.getString("ordertype"))) {
  485. batchDeleteErr.addErr(row.getString("txlogisticid"), row.getString("agentnum"), row.getString("abbreviation"), "未设置快递付款类型");
  486. continue;
  487. }
  488. String url_mailno = expressvalRows.get(0).getString("url_mailno");
  489. String clientId = expressvalRows.get(0).getString("clientid");
  490. String partnerID = expressvalRows.get(0).getString("partnerid");
  491. Person sender = new Person(expresssdrRows.get(0).getString("name"), expresssdrRows.get(0).getString("postcode"),
  492. expresssdrRows.get(0).getString("phonenumber"), expresssdrRows.get(0).getString("mobile"),
  493. expresssdrRows.get(0).getString("province"), expresssdrRows.get(0).getString("city") + "," + expresssdrRows.get(0).getString("county"), expresssdrRows.get(0).getString("address"));
  494. YTOExpressMailNoClient client = new YTOExpressMailNoClient(url_mailno, clientId, partnerID, sender);
  495. YTORequestOrder requestOrder = client.newYTORequestOrder();
  496. //tradeNo,orderType,serviceType,remark
  497. //rcv_name,rcv_postCode,rcv_phone,rcv_mobile,rcv_prov,rcv_city,rcv_address
  498. //itemName,number,itemsweight
  499. requestOrder.setTxLogisticID(row.getString("txlogisticid"));
  500. requestOrder.setTradeNo(row.getString("tradeno"));
  501. requestOrder.setOrderType(row.getInteger("ordertype"));
  502. requestOrder.setServiceType(row.getInteger("servicetype"));
  503. requestOrder.setRemark(row.getString("remarks"));
  504. //if(requestOrder.getOrderType()==0 || requestOrder.getOrderType()==4) {
  505. if (requestOrder.getOrderType() == 4) {
  506. requestOrder.setAgencyFund(row.getDouble("agencyfund"));
  507. }
  508. Person receiver = new Person(row.getString("rcv_name"), row.getString("rcv_postcode"),
  509. row.getString("rcv_phone"), row.getString("rcv_mobile"),
  510. row.getString("rcv_prov"), row.getString("rcv_city") + "," + row.getString("rcv_county"), row.getString("rcv_address"));
  511. requestOrder.setReceiver(receiver);
  512. Item item = new Item(row.getString("itemname"), row.getInteger("number"), row.getDouble("itemsweight"));
  513. requestOrder.setItems(new Item[]{item});
  514. //Map<String, Object> resultMap = new HashMap<>();
  515. Map<String, Object> resultMap = client.sendRequestForMailNo(requestOrder);
  516. if (resultMap != null) {
  517. String code = (String) resultMap.get("code");
  518. if ("200".equals(code)) {//成功
  519. UpdateSQL updateSQL = SQLFactory.createUpdateSQL(this, "expressform");
  520. updateSQL.setUniqueid(row.getLong("expressformid"));
  521. updateSQL.setSiteid(siteid);
  522. updateSQL.setDateValue("pushdate");
  523. updateSQL.setValue("code", code);
  524. updateSQL.setValue("mailno", (String) resultMap.get("mailNo"));
  525. Map<String, String> distributeInfoMap = (Map<String, String>) resultMap.get("distributeInfo");
  526. updateSQL.setValue("shortAddress", distributeInfoMap.get("shortAddress"));
  527. updateSQL.setValue("consigneebranchcode", distributeInfoMap.get("consigneeBranchCode"));
  528. updateSQL.setValue("packagecentercode", distributeInfoMap.get("packageCenterCode"));
  529. updateSQL.setValue("packagecentername", distributeInfoMap.get("packageCenterName"));
  530. updateSQL.setValue("success", 1);
  531. updateSQL.setValue("changeby", username);
  532. updateSQL.setDateValue("changedate");
  533. Rows expressform_stockbillrows = dbConnect.runSqlQuery("select * from sa_expressform_stockbill where expressformid=" + row.getLong("expressformid"));
  534. for (Row row1 : expressform_stockbillrows) {
  535. sqlList.add("update st_stockbill set txlogisticid='" + row.getString("txlogisticid") + "',mailno='" + (String) resultMap.get("mailNo") + "' where st_stockbillid=" + row1.getLong("st_stockbillid"));
  536. }
  537. sqlList.add(updateSQL.getSQL());
  538. } else {//失败
  539. UpdateSQL updateSQL = SQLFactory.createUpdateSQL(this, "expressform");
  540. updateSQL.setUniqueid(row.getLong("expressformid"));
  541. updateSQL.setSiteid(siteid);
  542. updateSQL.setDateValue("pushdate");
  543. updateSQL.setValue("code", code);
  544. updateSQL.setValue("reason", (String) resultMap.get("reason"));
  545. updateSQL.setValue("success", 0);
  546. updateSQL.setValue("changeby", username);
  547. updateSQL.setDateValue("changedate");
  548. sqlList.add(updateSQL.getSQL());
  549. batchDeleteErr.addErr(row.getString("txlogisticid"), row.getString("agentnum"), row.getString("abbreviation"), (String) resultMap.get("reason"));
  550. continue;
  551. }
  552. } else {
  553. batchDeleteErr.addErr(row.getString("txlogisticid"), row.getString("agentnum"), row.getString("abbreviation"), "请求电子面单接口超时");
  554. continue;
  555. }
  556. }
  557. dbConnect.runSqlUpdate(sqlList);
  558. HashMap<String, Object> result = new HashMap<>();
  559. String success = "共申请" + expressformids.size() + "张圆通电子面单号,其中失败" + batchDeleteErr.size() + "张!";
  560. result.put("success", success);
  561. result.put("errinfo", batchDeleteErr.getReturnObject());
  562. return getSucReturnObject().setData(result).toString();
  563. }
  564. /**
  565. * 批量打印(圆通)
  566. *
  567. * @return
  568. */
  569. @API(title = "批量打印(圆通)", apiversion = R.ID2025101815291401.v1.class)
  570. public String BatchPrint_YTO() throws YosException {
  571. JSONArray expressformids = content.getJSONArray("expressformids");
  572. List<Long> expressformidList = expressformids.toJavaList(Long.class);
  573. String[] fbillnums = new String[expressformidList.size()];
  574. for (int i = 0; i < expressformidList.size(); i++) {
  575. Row expressForm = dbConnect.runSqlQuery(0, "select * from expressform where expressformid=" + expressformidList.get(i));
  576. if (!expressForm.getBoolean("success") || expressForm.getString("mailNo").isEmpty()) {
  577. return getErrReturnObject().setErrMsg("快递信息单'" + expressForm.getString("txlogisticid") + "/" + expressForm.getString("rcv_name") + "',未成功申请圆通电子面单!").toString();
  578. }
  579. fbillnums[i] = expressForm.getString("mailNo");
  580. }
  581. String scheme = request.getHttpServletRequest().getScheme();
  582. String serverName = request.getHttpServletRequest().getServerName();
  583. int port = request.getHttpServletRequest().getServerPort();
  584. String hostName = scheme + "://" + serverName + ":" + port;
  585. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sys_resources", "url", "siteid,type", "sys_resourcesid", "contentType");
  586. querySQL.setWhere("resourcename", "yuantong3_batch");
  587. Row resourcesRow = querySQL.query().get(0);
  588. String url = "";
  589. if (resourcesRow != null && resourcesRow.getString("type").equals("固定网址")) {
  590. url = resourcesRow.getString("url");
  591. }
  592. if (resourcesRow != null && resourcesRow.getString("type").equals("附件")) {
  593. Rows attmap = Attachment.get(this, "sys_resources", resourcesRow.getLong("sys_resourcesid"));
  594. url = attmap.getLastRow().getString("url");
  595. }
  596. Hashtable<String, String> grMap = new Hashtable<>(3);
  597. grMap.put("baseurl", "");
  598. grMap.put("report", url);
  599. grMap.put("data", hostName + "/yos/rest/yt/getExpressInfo?fbilltype=expressbill&username=" + username + "&fbillnum=" + StringUtils.join(fbillnums, "&fbillnum="));
  600. return getSucReturnObject().setData(grMap).toString();
  601. }
  602. }