expressform.java 35 KB

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